ios - 为什么 alloc 和 init 在创建新对象时可能返回不同的对象?

标签 ios objective-c

正如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/

相关文章:

ios - 如何在MapBox MGLMapView上画一个圆?

iOS 标签可见性切换没有动画

ios - 调整图像大小会降低分辨率

ios - 应用两次排序无法正常工作

ios - 使用 UIRefreshControl 在 TableView 中置换标题

ios - 使用 MKUserTrackingModeFollowWithHeading 以编程方式更改缩放

objective-c - 检查目录是否存在时如何避免 EXC_BAD_ACCESS?

objective-c - 带有复选标记的 UITableViewCell 不可见

ios - 为什么无法在 UIWebView iOS7.1 应用程序中打开 itms-services 协议(protocol)?

objective-c - 为什么 UITableviewcell 不完整的滑动行充当完整的滑动行?