从阅读Property vs. ivar in times of ARC开始,我了解当我直接获取或设置__strong
属性的自动合成关联实例变量时,ARC将使用strong
所有权限定符,但不会调用自定义getter或setter也不会触发KVO。
但是,如果我将属性声明为weak
,那么:
@property (weak, nonatomic) id <XYZExampleViewDelegate> delegate;
自动合成的关联实例变量是否会采用__weak
所有权限定符?
例如,我的
实施中会_delegate = delegate
(vs self.delegate = delegate
)
- (id)initWithDelegate:(id <XYZExampleViewDelegate>)delegate
根据__weak
资格进行分配?
使用copy
声明的属性怎么样?
答案 0 :(得分:4)
是的,属性修饰符weak
暗示__weak
所有权。使用属性修饰符隐含的所有权限定符创建属性的关联实例变量(或支持ivar)。有关属性修饰符的列表以及它们所暗示的所有权限定符,请参阅Clang documentation on ARC property declarations。
属性修饰符copy
暗示__strong
所有权。因此,在直接设置支持ivar时,将保留新的指针,但不会复制。要复制它,请使用setter。