【问题标题】:Whats the difference between [NSArray array] and [[NSArray alloc] init][NSArray array] 和 [[NSArray alloc] init] 有什么区别
【发布时间】:2016-02-18 15:24:49
【问题描述】:
使用[NSArray array]方法创建的变量在控制器dealloc时并未完全dealloc
【问题讨论】:
标签:
ios
objective-c
dynamic
static
【解决方案1】:
在 ARC 下。
[NSArray array] 和 [[NSArray alloc] init] 做同样的事情。返回一个不可变的空数组。 ARC 负责内存管理。
没有 ARC。
[NSArray array] 返回一个将被自动释放的数组。
[[NSArray alloc] init] 返回一个数组,当您不再需要它时,通过在其上调用 release 来处理内存管理方面的问题。
注意
很少使用实例化空的不可变数组。检查NSArray's 其他将项目作为参数的初始化程序。在这种情况下,您有一个包含项目的不可变数组。但同样,这完全取决于您的需求。
【解决方案2】:
[NSArray Array] 类方法本身会产生一个自动释放的数组,这意味着您不必(也不应该)手动release 它。
[NSArray Array] 是一个构造函数售卖。
但是来到ARC(自动引用计数)之后,就没有release这样的东西了。因此,alloc-init 和出售autoreleased 对象的构造函数之间的区别实际上变得无关紧要。
https://stackoverflow.com/a/5423319/5019395
【解决方案3】:
[NSArray array] 目标 c 中的这种类型的方法称为便捷方法,它返回我们不拥有的对象,它们是自动释放对象。但是如果你想在这种情况下拥有对象的所有权,你必须使用 alloc init 方法来创建任何对象/
【解决方案4】:
array 是一个类方法,它本身会产生一个自动释放的数组,这意味着您不必(也不应该)手动释放它。由于带有 ARC 的 iOS 5,您不必担心解除分配处理。
【解决方案5】:
[NSArray Array] 甚至无法编译。您可能的意思是 [NSArray 数组]。
[NSArray array] 是一个方便的构造函数,它返回一个自动释放的对象。 Cocoa 和人们自己的代码中有许多便利构造函数。
坦率地说,您的其余问题没有意义。