如果我宣布一个强大的财产,就像这样:
@property (strong, nonatomic) UIView *iVar;
当我设置它时,如果我iVar = ...
或self.iVar = ...
,这是否重要?似乎在ARC中,他们做同样的事情。
如果我只声明实例变量(不是@property),例如BOOL selected
,那是否意味着它被推断为__unsafe_unretained
(因为没有属性指定它是强的),或者我必须明确指定吗?
在回答ARC: How to release static variable?时似乎我可能已经回答了我自己的问题,但我仍然对上述问题感到有些困惑。
答案 0 :(得分:20)
从内存管理的角度来看,使用ivar = ...
或self.property = ...
(注意:没有这样的东西与self.ivar
)是相同的。但是,ivar = ...
使用self.property = ...
时不会调用setter。这有三个重要的后果,没有特别的顺序:
nonatomic
,则访问基础ivar将不会获取锁定,您将打破原子性影响。至于仅声明ivar,它具有与声明局部变量相同的内存管理语义。这在section 4.4 of the Objective-C Automatic Reference Counting文档中有记录,但基本上,如果它是一个对象,它将被推断为__strong
。