0

「Beginning iPad Development」という Apress の本を読んでいて、作成者がプロパティに値を代入しているときに、以下を使用する場合があることに気付きました。

self.variable = value;

その他の場合は、次を使用します。

variable = [value retain];

どちらの場合も、変数は次のように定義されたプロパティです。

@property (nonatomic, retain) TYPE variable;

理解を深めるためになぜこれが行われるのか、誰かが知っているかどうか疑問に思いました

ありがとう、ウィリアム

4

2 に答える 2

3

2番目のフォームを使用する1つの場所は、独自のセッターメソッドを定義する場合です。セッターを再帰的に呼び出すため、そこでself.variableに割り当てることはできません。したがって、たとえばこれは間違っています:

-(void)setVariable:(TYPE*)value {
    if (value != variable) {
        [variable release];
        self.variable = [value retain]; // WRONG! Calls 
                                        // [self setVariable:[value retain]]
    }
}

これは正しいです:

-(void)setVariable:(TYPE*)value {
    if (value != variable) {
        [variable release];
        variable = [value retain];
    }
}

それは役に立ちますか?

于 2010-09-20T14:55:28.310 に答える
1

多くの場合、それらはメモリ的に同等です。コンパイラは、生成されたセッターを呼び出し (@synthesize を使用している場合)、それを保持しますself.variable = value[self setVariable:value]

于 2010-09-20T14:50:34.070 に答える