2013-03-07 73 views
-4

看起來像一個二傳手:按值傳遞不影響Setter?

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

如果我打電話[self setCount:anNSNumber],將發生作用(_count將被釋放,anNSNumber將被保留,......你也知道)。但我知道在Obj-C中按值傳遞是默認的。那麼,爲什麼會這樣呢?

+0

你可以制定更好的問題嗎? – 2013-03-07 17:49:58

回答

2

參數按值傳遞。在這種情況下,參數是一個指針。指針,而不是對象,按值傳遞。

2

你說的Objective-C使用pass-by-value是正確的;它不是簡單的默認值,而是唯一支持的參數傳遞機制。 Objective-C++也支持C++ pass-by-reference。

在你在可變anNSNumber表達[self setCount:anNSNumber]被傳遞給setCount。然而,該值是類型爲NSNumber *參考,並且該參考可用於修改所參考的對象。

爲參數傳遞的值用於初始化被調用者中的局部變量,並且可以修改該變量中的值而不會對調用者產生任何影響 - 這是按值調用的定義。因此,例如,你可以添加到您的setCount

newCount = [NSNumber numberWithInteger:42]; 

而且會對主叫方沒有任何影響。