【问题标题】: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 和人们自己的代码中有许多便利构造函数。

          坦率地说,您的其余问题没有意义。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-07-22
            • 2013-06-12
            • 2010-11-23
            • 1970-01-01
            相关资源
            最近更新 更多