![iphone – [NSMutableArray数组] vs [[NSMutableArray alloc] init],第1张 iphone – [NSMutableArray数组] vs [[NSMutableArray alloc] init],第1张](/aiimages/iphone+%E2%80%93+%5BNSMutableArray%E6%95%B0%E7%BB%84%5D+vs+%5B%5BNSMutableArray+alloc%5D+init%5D.png)
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]所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)