在ARC上使用@property

时间:2013-02-23 08:06:05

标签: iphone ios properties automatic-ref-counting

// .h
@property ( strong, nonatomic ) NSString *note;

// .m
@synthesize note = _note;

- ( id ) initWithNote: ( NSString * )note {

    self = [ super init ];
    if ( self ) {
        _note = note;   // _note is just a instance variable.
        self.note = note;   // 'self.note = note;' is using setter method.
        return self;
    }
    return nil;
}

@property ( strong, nonatomic ) NSString *note;会影响setter和getter方法。 默认情况下,ARC上的变量是__strong类型。

_note = note;self.note = note;之间有什么区别? strong代替了这种情况。

2 个答案:

答案 0 :(得分:1)

如果我正确理解了这个问题......

如果你覆盖了一个setter,你想分配给_propertyName而不是self.propertyName,以避免无限递归:

- (void)setNote:(NSString *)note
{
    _note = note;
    // self.note = note; // <-- doing this instead would freeze, and possibly crash your app
}

如果你重写吸气剂,那同样的事情。在其他情况下,您可以使用两者中的任何一个。

答案 1 :(得分:1)

如果您使用(nonatomic),它们现在实际上是相同的。但是,如果您使用(atomic)(默认设置),或者更有可能定义自定义设置器,它们会有所不同:

- (void)setNote:(NSString *)note {
    // Do something fancier than this
    _note = note;
}
self.note = note; // use the custom setter

_note = note; // set the variable directly