为什么该方法[NSString stringWithFormat]
返回一个id
类型?从名字来看,我期待它返回一个NSString
,不是通用指针。其他类也遵循这个“规则”。例如[NSNumber numberWithInt]
返回一个NSNumber
,不是一个id
.
我认为从工厂方法之类的事实来看,这甚至是不合理的。
你提到NSNumber
,这没有任何直接子类,因此对于numberWithInt:
返回一个NSNumber*
NSString*
(以及其他类,例如NSSet
) 返回类型id
因为它们可以有子类(NSMutableString
and NSMutableSet
分别),它将继承这个方法。因此,这些继承的调用需要返回子类类型的实例,并且由于方法命名规则,您不能仅根据返回类型进行重载。因此,他们需要一个共同的类型,即id
.
Update:最近的发展意味着关键词instancetype
现在可用。您可能已经注意到很多参考文献id
现在被替换为instancetype
。该关键字向编译器提示该方法的返回类型与该方法的接收者是同一类。
例如(我强调一个例子,实际框架中可能不是这样):
NSArray:
- (instancetype)initWithArray:(NSArray*)array;
NSMutableArray:
// Inherits from NSArray
----
// Receiver is NSArray, method belongs in NSArray, returns an NSArray
[[NSArray alloc] initWithArray:@[]];
// Receiver is NSMutableArray, method belongs in NSArray, returns an NSMutableArray
[[NSMutableArray alloc] initWithArray:@[]];
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)