合成的ivar的保留语义是什么?

时间:2014-02-15 15:21:26

标签: objective-c memory-management properties automatic-ref-counting llvm

当你创建一个属性并且编译器自动合成底层的ivar时,ivar是否具有相同的保留语义具有该属性,还是retain语义只适用于“setter”?

@property (nonatomic, strong) NSObject *strongObject
@property (nonatomic, weak)   NSObject *weakObject

_strongObject = [[NSObject alloc] init];    // is this strong?
_weakObject =   [[NSObject alloc] init];    // is this weak?

1 个答案:

答案 0 :(得分:1)

检查this问题。假设您正在使用ARC,似乎底层变量具有与属性相同的语义。您可以将setter覆盖为强大的属性,如下所示:

- (void)setMyObject:(MyObject *)anObject
{
   _myObject = anObject;
}

这意味着您不必在之前发布(就像在非ARC中一样),因为ARC在ivar级别处理此问题(请参阅here)。

但是,如果不使用ARC,例如assign和retain,则不适用于ivars,仅适用于属性。