// .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;
之间有什么区别?
1}},非ARC上的strong
代替了这种情况。
答案 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