2012-05-25 30 views
4

我不喜歡ARC。如何在非ARC下清零弱引用?

但是ARC的最重要的特性,歸零弱引用,在非ARC下丟失了。目前我使用的是MAZeroingWeakRef,它可以工作,但是很有效,有時會使代碼變得冗餘。任何其他方式來調零弱引用?

+2

剛剛在Dealloc中無效出現了什麼問題?無論如何,這都是零。 – CodaFi

+4

'我不喜歡ARC',我們應該是朋友! – Jake

+4

你的分析很奇怪。清零弱引用可能是ARC最不重要的特性(儘管它們很好)。 ARC最重要的特性是時間和空間性能的改進以及更安全的代碼(更少的崩潰),而且幾乎在每種情況下都更容易編寫。還有什麼其他編譯器功能可以提供這些功能?在iOS 4上,ARC與iOS 5一樣有價值,因爲它在iOS 5上。「http://stackoverflow.com/questions/8760431/to-arc-or-not-to-arc-what-are-the-pros 8760820#8760820 –

回答

0

我認爲你應該堅持蘋果公司在ARC推出之前推薦的範例,即在-dealloc方法中刪除所有「弱」引用。它不僅是事實上的標準,而且它也是Xcode代碼重構在未啓用ARC時的行爲方式,因此符合它會爲您節省一些麻煩。

1

實施調零弱參考不難。所有你所要做的只是跟蹤所有的引用指針 - 將它們存儲在一個集合中 - 並在指針對象被釋放時分配NULL。無論如何,做所有這些事情手動確實是很多工作,你實際上需要編寫所有的手動跟蹤代碼,以便在Objective-C中足夠高效。

最後,你會發現你需要一些自動代碼寫入機 - 靜態編譯器 - 這正是ARC所做的。你可以自己實現類似ARC的東西。但是,如果我是你,我將只使用編譯器維護人員已有的,健壯的,穩定的,精心設計的和支持的實現。

另外,如果你想開發蘋果的東西,不遵循蘋果是不明智的行爲。與其他平臺持有者(如微軟)不同,Apple不關心保持向後兼容性。如果他們認爲某些東西不好,最終會被棄用和移除 - 就像Objective-C GC一樣。