为了账号安全,请及时绑定邮箱和手机立即绑定

[NSMutableArray array]与[[NSMutableArray alloc]

[NSMutableArray array]与[[NSMutableArray alloc]

蛊毒传说 2019-10-29 14:38:42
有人可以告诉我使用以下方法声明可变数组的区别: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块,而不是一个自动释放池(伪)对象。)


查看完整回答
反对 回复 2019-10-29
?
波斯汪

TA贡献1811条经验 获得超4个赞

在array本身的类方法产生自动释放的数组,这意味着你不必(也不应该)手动释放它。


查看完整回答
反对 回复 2019-10-29
  • 3 回答
  • 0 关注
  • 579 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信