在接口中定义strong
属性时,如下所示:
@property (nonatomic, strong) UIColor *petColor;
不再需要添加@synthesize
, 或@dynamic
, 或手动将内部 ivar 定义为_petColor
, 这一切都行得通。setter/getter 是自动生成的,您_petColor
无需任何额外代码即可在内部访问。
但是,我有点困惑(如果有的话),当覆盖一个 setter 时,ARC 知道是否根据属性是strong
还是插入保留/释放调用weak
?例如,如果我有两个属性:
@property (nonatomic, strong) UIColor *petColor;
@property (nonatomic, weak) SomeClass *petDelegate;
如果我想覆盖这些属性的设置器,它们似乎几乎完全相同?
- (void)setPetColor:(UIColor *)theColor {
if (![theColor isEqual:petColor]) {
_petColor = theColor;
}
}
- (void)setPetDelegate:(SomeClass *)theDel {
if (theDel != petDelegate) {
_petDelegate = theDel;
}
}
它是否正确?如果是这样,ARC 是自动retain/release
在这两个设置器中插入正确的调用,还是仅在strong
属性的覆盖设置器中插入正确的调用?
进一步:在这种情况下,财产行为是否与weak
财产行为不同assign
?