正如ios文档所说,我们应该创建一个新的对象如下
NSObject *newObject = [[NSObject alloc] init];
永远不要创建这样的对象
NSObject *someObject = [NSObject alloc];
[someObject init];
它说 init
可能会返回与 alloc
不同的对象,所以我很困惑为什么或在什么情况下它们会返回不同的对象?谢谢!
最佳答案
这种行为是允许的,这样你的类就可以为正在创建的对象生成一个替代对象。您可能出于以下几个原因想要这样做:
- 对象缓存 - 如果您需要经常创建和释放相同的对象,例如,当您为数值创建包装对象时,您可以存储对象实例以供重用,并在请求时返回它们.如果使对象不可变,则可以通过共享对象来节省大量内存。
- 返回子类 - 这样做有多种设计原因,例如,实现与返回对象的接口(interface)兼容的隐藏功能,例如写时复制。
- 返回
nil
- 您可以这样做以指示您的init
函数失败。
关于ios - 为什么 alloc 和 init 在创建新对象时可能返回不同的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27229799/