2014-01-09 44 views
2

正在檢查新的價值與舊的價值仍然需要在ARC下一個設置?我不記得何時何地(我認爲這是在另一個堆棧溢出問題)我讀了它不再需要。在ARC下是否有屬性設置器形式的官方文檔?

- (void)setProperty:(PropertyType)property 
{ 
    if (_property != property) { 
     _property = property; 
    } 
    // Other code 
} 

有人可以告訴我在哪裏可以找到有關此官方文檔?

+0

基本上,我希望能夠訪問,確認任何蘋果的文檔有不需要這種情況。我不希望你覺得我不相信你的答案,只是這是爲了我公司的文件,我需要那些資源=( –

+0

這是一個屬性的設置?爲什麼不只是讓它成爲合成?還是你需要做的比你的代碼中顯示的更多? – rmaddy

+0

是的,還有更多,我會把它放在代碼中=)感謝你注意它。 –

回答

1

假設PropertyType是一個指向Objective-C的對象,你總是可以寫你的制定者沒有檢查,像這樣:

- (void)setProperty:(PropertyType)newValue { 
    [newValue retain]; 
    PropertyType oldValue = _property; 
    _property = newValue; 
    [oldValue release]; 
} 

ARC實現了完全一樣的強有力的任務。引用Objective-C Automatic Reference Counting from the clang documentation

對於__strong對象,首先保留新的指針對象;其次,左值裝載了原始語義;第三,新的pointee用原始語義存儲到左值中;最後,舊的指針被釋放。這不是以原子方式執行的;面對併發加載和存儲,必須使用外部同步來保證安全。

因此我們可以推斷出,在ARC,可以實現屬性setter用一個簡單的任務,並沒有檢查:

- (void)setProperty:(PropertyType)newValue { 
    _property = newValue; 
} 
3
- (void)setProperty:(PropertyType)property 
{ 
    _property = property; 
} 

這對於ARC中的setter來說已經足夠了。

+0

您是否知道任何說明不需要該條件的文檔? –

+0

我沒有找到文檔。但是,ARC將能夠處理與該屬性分配關聯的內存相關的任何內容。 – danielM

+0

也許你可以告訴我在ARC之前在XCode的早期版本中使用'if'語句的原因。我需要知道它爲什麼不再需要的原因了=) –

相關問題