与 init]之间的区别

有人可以告诉我在声明一个可变数组的区别:

NSMutableArray *array = [NSMutableArray array]; 

 NSMutableArray *array = [[NSMutableArray alloc] init]; 

因为在开始的时候我用alloc来声明所有的数组,如果在某个函数结束时我返回了使用alloc创build的数组,我必须自动释放该数组,因为内存泄漏问题。

现在使用第一个声明,我不需要发布任何东西。

谢谢

因为在开始时我是用alloc声明所有的数组,如果在某个函数结束时我返回了使用alloc创build的数组,我必须自动释放该数组,因为内存泄漏问题。 现在使用第一个声明我不需要发布任何东西

这是完全正确的,当你“vend”一个对象。 但是在其他情况下,当你在iOS上创build一个对象时,你可以在获得一个现成的自动释放对象和调用alloc之后select释放之间进行select,Apple希望你使用alloc和release,因为这会保持对象的生命周期短而且在你的控制之下。

这里的问题是,autoreleased对象生活在autorelease池,可以堆积,直到池被耗尽,只要可能。

另外要注意的是循环。 你可能会产生自动释放的对象,而不知道它,他们只是堆放在池中。 解决方法是在循环开始时创build自己的autorelease池,并在循环结束时释放它,以便每次循环都释放对象。

编辑 – 2011年12月18日:但随着iOS 5和ARC的到来,autorelease机制是更有效率,并没有这样的事情release ,所以alloc-init和便利构造函数之间的区别出售自动释放对象变得没有意义。 (也是现在@autoreleasepool块,而不是一个autorelease池(伪)对象。)

array类方法本身产生一个自动释放数组,意味着你不必(也不应该)手动释放它。

  • ARC真的支持iOS 4吗? iOS 4.2 SDK在链接时缺less与ARC相关的符号
  • 无法为FacebookSDK 4构build模块“FBSDKCoreKit”
  • 使用Swift访问iOS地址簿:数组数量为零
  • 如何手动Symbolicate iOS崩溃查看崩溃日志
  • 无效的设备状态 – Xcode / iOS模拟器错误
  • 你如何创build一个快速的date对象
  • 有条件的segue在UITableViewCell上点击执行
  • 使用自动布局以编程方式更改框架
  • 从NSArray获取对象的索引?
  • 找不到合适的loggingvalidation您的捆绑包标识符是否正确
  • 在UIScrollView中,UIButton touch会延迟