-5

セッターは次のようになります。

- (void)setCount:(NSNumber *)newCount {
    [newCount retain];
    [_count release];
    // Make the new assignment.
    _count = newCount;
}

を呼び出す[self setCount:anNSNumber]と、効果が発生します(_count解放さanNSNumberれる、保持される...ご存知のように)。しかし、Obj-C では値渡しがデフォルトであることを知っています。それで、なぜそれが起こったのですか?

4

2 に答える 2

2

パラメータは値で渡されます。この場合、パラメーターはポインターです。オブジェクトではなく、ポインタが値によって渡されます。

于 2013-03-07T18:19:23.737 に答える
2

あなたはObjective-Cが値渡しを使用していると言っているのは正しいです。これは単なるデフォルトではなく、サポートされている唯一のパラメータ受け渡しメカニズムです。Objective-C ++は、C++の参照渡しもサポートしています。

式では、変数[self setCount:anNSNumber]anNSNumberがに渡されsetCountます。ただし、その値はタイプの参照NSNumber *であり、その参照を使用して、参照されるオブジェクトを変更できます。

パラメータに渡される値は、呼び出し先のローカル変数を初期化するために使用され、呼び出し元に影響を与えることなく、その変数の値を変更できます。これは、値による呼び出しの定義です。したがって、たとえば、次のように追加できますsetCount

newCount = [NSNumber numberWithInteger:42];

そして、それは発信者に影響を与えません。

于 2013-03-07T18:23:55.827 に答える