【问题标题】:Setting WEAK to a non @property variable将 WEAK 设置为非 @property 变量
【发布时间】:2012-07-05 09:49:18
【问题描述】:

需要了解 ARC 的人来帮助我。

基本上,我已经在我的类中声明了一些变量

@interface Class{
    NSString* one;
    NSString* two;
}

@property(nonatomic,weak) NSString* one;

如您所见,我可以将弱标识符设置为NSString* one。但是,我不需要 NSString* two 的 getter/setter/synthesizer,因为它只是一个公共变量。如何为其设置weak 标签以便释放内存?还是自动设置?

【问题讨论】:

    标签: objective-c ios cocoa-touch automatic-ref-counting weak


    【解决方案1】:

    可以这样做:

    __weak NSString *two;
    

    但在这种情况下,您可能不想要这样做。

    声明一个实例变量__weak 意味着对目标对象的引用(在你的例子中是一个字符串)只有在其他对象持有引用时才会存在。当最后一个持有强引用的对象释放字符串时,您的变量two 将自动得到nil-ed。这在对象保持相互引用时非常有用,例如在父子层次结构中。由于您的 NSString *two 不可能持有对您的对象的引用,因此使用 __weak 引用是非常值得怀疑的。

    【讨论】:

      【解决方案2】:

      您可以放心地做到这一点:

      NSString* two = [[NSString alloc] init];
      

      当您的类 Class 的实例由于某种原因被释放时,因为它是唯一(理论上)引用 two 的实例,它将被释放。

      【讨论】:

        【解决方案3】:

        我的建议(虽然我可能错了,但我认为 Apple 的建议)是养成始终为 iVar 使用属性的习惯,然后这个问题就消失了。

        【讨论】:

          猜你喜欢
          • 2017-05-08
          • 1970-01-01
          • 1970-01-01
          • 2021-11-01
          • 2010-11-04
          • 2023-03-24
          • 2015-05-25
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多