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