[NSMutableArray array]与[[NSMutableArray alloc]

有人可以告诉我使用以下方法声明可变数组的区别:


NSMutableArray *array = [NSMutableArray array];


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

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


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


谢谢


蛊毒传说
浏览 586回答 3
3回答

慕桂英3389331

因为一开始我是用alloc声明我的所有数组,如果在某个函数的末尾我返回了用alloc创建的数组,则我必须自动释放该数组,因为内存泄漏问题。现在使用第一个声明,我不需要释放任何内容当您“出售”一个对象时,这是完全正确的。但是在其他情况下,当您在iOS上创建对象时,可以在获取现成的自动释放对象和调用alloc之后再释放之间进行选择,Apple希望您使用alloc和release,因为这样可以保持对象的生命周期短,由您控制。这里的问题是,自动释放的对象驻留在自动释放池中,并且可能一直堆积到池耗尽为止。需要注意的另一件事是循环。您可能会在不知不觉中生成自动释放的对象的情况下,它们只是堆积在池中。解决方案是在循环开始时创建自己的自动释放池,并在循环结束时释放它,以便每次通过循环都释放对象。但是随着iOS 5和ARC的到来,自动释放机制更加有效,并且没有诸如之类的东西release,因此alloc-init和出售自动释放对象的便利构造函数之间的区别变得模拟。(现在它也是一个@autoreleasepool块,而不是一个自动释放池(伪)对象。)

波斯汪

在array本身的类方法产生自动释放的数组,这意味着你不必(也不应该)手动释放它。
打开App,查看更多内容
随时随地看视频慕课网APP