正如ios的文档所说,我们应该在
之后创建一个新对象NSObject *newObject = [[NSObject alloc] init];
永远不要创建像这样的对象
NSObject *someObject = [NSObject alloc];
[someObject init];
它说init
可能返回的不同于alloc
,所以我很困惑为什么或在什么情况下它们返回不同的对象?谢谢!
答案 0 :(得分:2)
允许此行为,以便您的类可以为正在创建的对象生成替代对象。您可能希望这样做有几个原因:
nil
- 您可以执行此操作来指示init
功能失败。答案 1 :(得分:0)
因为
NSObject * someObject = [NSObject alloc];
所有alloc都为对象分配内存。在这个时间点,没有实际的NSObject类型,只是一个内存区域。如果你立即调用init但是你可能没有意识到init没有被调用并尝试在没有初始化的情况下使用该对象,这没有任何直接后果。
另一个答案有更好的理由,你可能无法从init获得相同的对象。
答案 2 :(得分:0)
以NSString类的大量initWith ...方法为例。有些是非常专业的,并且想要返回一个专门的对象。 alloc不知道那个。所以[NSString alloc]返回一个通用的NSString对象,每个initWith方法都可以返回一些专用对象。