繁体   English   中英

[NSMutableArray数组]与[[NSMutableArray alloc] init]之间的区别

[英]Difference between [NSMutableArray array] vs [[NSMutableArray alloc] init]

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

NSMutableArray *array = [NSMutableArray array];

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

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

现在使用第一个声明我不需要发布任何内容。

谢谢

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

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

当你“抛售”一个物体时,这是完全正确的。 但在其他情况下,当您在iOS上创建一个对象时,您可以在获取现成的自动释放对象和调用alloc然后释放之间做出选择,Apple希望您使用alloc和release,因为这样可以保持对象的生命周期简短而且在你的控制之下。

这里的问题是自动释放的对象存在于自动释放池中,并且可以堆积直到池被耗尽,无论何时可能。

另外需要注意的是循环。 您可能会在不知情的情况下生成自动释放的对象,并且它们只会堆积在池中。 解决方案是在循环开始时创建自己的自动释放池,并在循环结束时释放它,以便每次通过循环释放对象。

编辑 - 12/18/2011:但是随着iOS 5和ARC的到来,自动释放机制效率更高,并且没有release这样的东西,所以alloc-init和便利构造函数之间的区别是自动释放的对象变得没有实际意义 (它现在是@autoreleasepool块而不是自动释放池(伪)对象。)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM