- (NSManagedobject *)objectWithID:(NSManagedobjectID *)objectID;- (UItableVIEwCell *)dequeueReusableCellWithIDentifIEr:(Nsstring *)IDentifIEr;+ (ID)insertNewObjectForEntityForname:(Nsstring *)entityname inManagedobjectContext:(NSManagedobjectContext *)context@H_403_12@期望所有这些方法都返回返回类型的子类是合理的.因此,返回的对象通常被分配给期望类型的变量,例如:
BCCustomtableVIEwCell *cell = [tableVIEw dequeueReusableCellWithIDentifIEr:[BCCustomtableVIEwCell cellIDentifIEr]];@H_403_12@这使得编译器不高兴;一个演员解决了这个,但像这样的演员很脏:
BCCustomtableVIEwCell *cell = (ID)[tableVIEw dequeueReusableCellWithIDentifIEr:[BCCustomtableVIEwCell cellIDentifIEr]];@H_403_12@但是,当返回类型为ID时,可以删除此强制转换,虽然以某些类型安全为代价,导致我的代码更清晰:
BCPerson *person = [NSEntityDescription insertNewObjectForEntityForname:BCPersonEntityname inManagedobjectContext:context];@H_403_12@就个人而言,我更喜欢它.有没有任何理由说Apple用于选择一种方法而不是另一种方法,还是仅仅是由于编写方法的开发人员的偏好?
解决方法 在您描述的三个示例中,有两个不同的原则在起作用:在第一个中,Apple希望你使用一个演员作为“我知道我在做什么”的事情:当你通过一个标识符访问一个通用对象时,你可能最终会对返回的类感到惊讶价值,除非你知道你在做什么.
在后一个示例中,该方法本质上是一个工厂方法,相当于alloc init,在大多数情况下,您最好知道它是在做什么.
换句话说,回答你的问题:
对于工厂方法,ID,对于getter,与setter相同.
总结以上是内存溢出为你收集整理的objective-c – 当方法可以返回子类时,返回类型应该是什么?全部内容,希望文章能够帮你解决objective-c – 当方法可以返回子类时,返回类型应该是什么?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
概述以下是一些Apple类的一些方法: - (NSManagedObject *)objectWithID:(NSManagedObjectID *)objectID;- (UITableViewCell *)dequeueReusableCellWithIdentifier:(NSString *)identifier;+ (id)insertNewObjectForEntityForName 以下是一些Apple类的一些方法:
赞
(0)
打赏
微信扫一扫
支付宝扫一扫
cocoa – NSTextField清除按钮
上一篇
2022-05-22
objective-c – 使用root权限部署应用程序
下一篇
2022-05-22
评论列表(0条)