iphone – [NSMutableArray数组] vs [[NSMutableArray alloc] init]

iphone – [NSMutableArray数组] vs [[NSMutableArray alloc] init],第1张

概述有人可以告诉我在声明一个可变数组的区别: NSMutableArray *array = [NSMutableArray array]; 和 NSMutableArray *array = [[NSMutableArray alloc] init]; 因为一开始我用alloc声明了所有的数组,如果在某个函数的最后,我返回了用alloc创建的数组,我不得不自动释放该数组,因为内存泄漏问题。 现在使用 有人可以告诉我在声明一个可变数组的区别:

NSMutableArray *array = [NSMutableArray array];

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

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

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

谢谢

解决方法

Because in the beginning i was declaring all my arrays with alloc and if in the end of a certain function i returned the array created with alloc i had to autorelease that array,because memory leak problems. Now using the first declaration i don’t need to release anything

这是完全正确的,当你“售卖”一个对象。但是在其他情况下,当您在iOS上创建对象时,您可以在获取现成的自动释放对象和调用alloc后跟发布之间进行选择,Apple希望您使用alloc和release,因为这将保持对象的生命周期短和在你的控制之下。

这里的问题是自动释放的对象住在自动释放池,并可以堆积,直到池被排空,无论何时可能。

另一件值得注意的事情是循环。你可以生成自动释放的对象,而不知道它,它们只是堆积在池中。解决方案是在循环开始时创建自己的自动释放池,并在循环结束时释放它,以便每次通过循环释放对象。

编辑 – 12/18/2011:但是使用iOS 5和ARC的到来,autorelease机制是更有效率,没有这样的东西,释放,所以区分alloc-init和一个方便的构造函数自动释放对象变得哑巴。 (它现在是一个@autoreleasepool块,而不是一个自动释放池(伪)对象。)

总结

以上是内存溢出为你收集整理的iphone – [NSMutableArray数组] vs [[NSMutableArray alloc] init]全部内容,希望文章能够帮你解决iphone – [NSMutableArray数组] vs [[NSMutableArray alloc] init]所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1087930.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-27
下一篇2022-05-27

发表评论

登录后才能评论

评论列表(0条)

    保存