【问题标题】:iOS 5 Instance variablesiOS 5 实例变量
【发布时间】:2011-10-14 23:09:12
【问题描述】:

我对 ARC 的工作原理有点困惑,我知道有自动引用计数,但是即使分配原始实例变量(不使用属性),这个功能也能工作。

例如,如果我有一个实例变量arr

@interface TestClass : NSObject {
   NSArray *arr;
}

现在,如果在一个方法中,我使用自动发布的NSArray 分配它:

- (IBAction)test {
    arr = [NSArray arrayWithObject:@"TEST"];
 }

这个数组会发生什么?它会神奇地保留它直到arr 被重新分配给其他东西吗?

现在,如果我这样做:

self.arr = [NSArray arrayWithObject:@"TEST"];

如果它是强对弱会发生什么?

【问题讨论】:

标签: iphone ios ios5 automatic-ref-counting


【解决方案1】:

是的,ARC 适用于原始 ivar 访问。就像局部变量一样,ivars 隐含为__strong,除非用__weak__unsafe_unretained 装饰。因此,默认情况下,它们的行为类似于标记为 strong(或 retain,在 ARC 下是 strong 的同义词)的属性。

【讨论】:

  • Kevin,如果您直接访问合成的 ivar,带有 copy 语义的 @synthesized 属性会发生什么情况。编译器是否插入copy
  • @StevenKramer:不。直接访问 ivars 总是会忽略属性的内存管理语义。唯一重要的是合成的 ivar 将获取它所合成的属性的弱/强语义)
  • 感谢凯文提供的信息。刚刚在调试器中验证了这一点。我猜这是一个有点奇怪但可以理解的选择。
猜你喜欢
  • 1970-01-01
  • 2012-03-03
  • 2014-09-21
  • 2013-10-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多