什么是[NSArray数组]和[[NSArray alloc] init]之间的区别

时间:2015-11-17 09:55:17

标签: ios objective-c dynamic static

当控制器dealloc

时,使用[NSArray array]方法创建的变量不是完全dealloc

5 个答案:

答案 0 :(得分:3)

在ARC。

[NSArray array][[NSArray alloc] init]也是这样做的。返回一个不可变的空数组。 ARC负责内存管理。

没有ARC。

[NSArray array]返回一个将自动释放的数组。 [[NSArray alloc] init]返回一个数组,您需要在内存管理方面进行处理,在您不再需要时调用release

注意

实例化空的不可变数组几乎没有用处。检查NSArray's其他将项目作为参数的初始值设定项。在这种情况下,您有一个包含项目的不可变数组。但同样,这一切都取决于您的需求。

答案 1 :(得分:1)

[NSArray Array]类方法本身会生成一个自动释放的数组,这意味着您不必手动(也不应该)release它。

[NSArray Array]是一个构造函数。

但是在进入ARC(自动引用计数)之后,没有release之类的东西。因此,alloc-init与出售autoreleased对象的构造函数之间的差异实际上变得无关紧要。

https://stackoverflow.com/a/5423319/5019395

答案 2 :(得分:1)

[NSArray数组]目标c中的这种类型的方法称为便捷方法,它返回我们不拥有的对象,它们是自动释放对象。但是如果你想在这种情况下拥有对象的所有权,你必须使用alloc init方法来创建任何对象/

答案 3 :(得分:0)

array是一个类方法,它自己生成一个自动释放的数组,这意味着你不必(也不应该)手动释放它。从带有ARC的iOS 5开始,您不必担心解除分配处理。

答案 4 :(得分:-1)

[NSArray Array]甚至没有编译。你可能意味着[NSArray数组]。

[NSArray数组]是一个便利构造函数,它返回一个自动释放的对象。 Cocoa和人们自己的代码中有许多便利构造函数。

坦白说,你的其余问题没有意义。