objective-c – 当方法可以返回子类时,返回类型应该是什么?

objective-c – 当方法可以返回子类时,返回类型应该是什么?,第1张

概述以下是一些Apple类的一些方法: - (NSManagedObject *)objectWithID:(NSManagedObjectID *)objectID;- (UITableViewCell *)dequeueReusableCellWithIdentifier:(NSString *)identifier;+ (id)insertNewObjectForEntityForName 以下是一些Apple类的一些方法:

- (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 – 当方法可以返回子类时,返回类型应该是什么?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1002893.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-22
下一篇 2022-05-22

发表评论

登录后才能评论

评论列表(0条)

保存