在接口中定义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?