0
// .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;ますか?の代わりにstrongretain非 ARC でこの状況に違いをもたらします。

4

2 に答える 2

1

質問を正しく理解していれば...

セッターをオーバーライドする場合は、無限再帰を避けるために_propertyNameの代わりにを割り当てます。self.propertyName

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

ゲッターをオーバーライドしている場合も同じです。他の状況では、2 つのいずれかを使用できます。

于 2013-02-23T08:12:58.970 に答える
1

を使用すると、これらは事実上同じになります(nonatomic)。ただし、(atomic)(デフォルト設定) を使用するか、カスタム setter を定義する可能性が高い場合は異なります。

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

_note = note; // set the variable directly
于 2013-02-23T08:13:46.693 に答える