【问题标题】:ARC: how do I dealloc at the end of object life cycle?ARC:如何在对象生命周期结束时解除分配?
【发布时间】:2012-03-21 02:54:57
【问题描述】:

在使用 ARC 时,我试图了解对象的生命周期。本质上,当在 .h 文件中全局声明时,我找不到管理对象的最佳做法:

@interface MyClass : UIViewController {
    NSArray *arrayA;
}

@property (strong) NSArray *arrayB;

现在据我了解,arrayA 和 arrayB 都被声明为强,因此当它们设置为 = nil 或更改为指向不同的对象时,它们将被释放。当 MyClass 的对象被释放时,它们是否也会被释放?还是我必须覆盖 dealloc 并将它们全部设置为零?我的猜测是该属性将被释放,但 arrayA 不会。

对我来说,对所有事物都使用属性没有意义。让我需要在代码中的不同方法中使用的保留对象但保持私有的最佳做法是什么?

【问题讨论】:

  • 你的代码没问题。 arrayA 将在MyClass 释放时释放。

标签: objective-c cocoa automatic-ref-counting


【解决方案1】:

当 MyClass 的对象被释放时,它们是否也会被释放?

没有。当 MyClass 对象被释放时,它们会自动释放。但这很好,这就是你想要的。

对我来说,对所有事物都使用属性没有意义。让我需要在代码中的不同方法中使用的保留对象但保持私有的最佳做法是什么?

您可以直接使用实例变量。 ARC 将放入所需的保留/释放以使其正常工作。

【讨论】:

    【解决方案2】:

    实际上,我认为您正在寻找的是私有财产。在您的 .m 文件中声明它们,使用私有 @interface 如下:

    @interface myClass()
    @property (strong, nonatomic) NSArray *arrayWithSemanticName;
    @end
    
    @implementation myClass
    // my class goes here
    ...
    @end
    

    :)

    编辑:

    它也适用于 Interface Builder,将它们设置为 IBOutletsIBActions 效果很好,就像从 IB 中拖动它们一样。

    【讨论】:

      猜你喜欢
      • 2013-08-22
      • 1970-01-01
      • 2017-06-28
      • 1970-01-01
      • 1970-01-01
      • 2021-04-02
      • 2012-01-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多