2016-02-10 29 views
0

似乎自動引用計數(ARC)給開發人員帶來了太多的負擔以跟蹤引用。你爲什麼不能讓每個變量都變弱,而不必擔心發生強烈的保留週期?即使不需要使用弱變量的缺點?

+1

它可能會讓你感到驚訝,但是ARC使這個*更容易*,而不是更難! :) –

+0

關掉ARC,看看你是否可以學習做內存管理。可能要先閱讀本書的這一章:http://www.apeth.com/iOSBook/ch12.html#_principles_of_cocoa_memory_management – matt

+0

垃圾收集(GC)非常方便;) – TruMan1

回答

4

我怕你只是不理解ARC。 ARC根據是否定義爲強或弱定義了引用計數(實際上,強引用計數增大,而弱引用計數不定)。如果引用計數變爲0,它將從內存中移除。所以,如果一切都很弱,屬性會立即從內存中刪除,而你不能使用它們。實際上,你需要一個強壯的地方。

作爲計劃如何構建強/弱定義的一種簡單方法,可以將一個特定的類視爲屬性的所有者,然後給它一個強大的屬性。這意味着該財產將繼續爲該所有者使用。如果另一個階級也有對該財產的引用,但並不要求該財產始終堅持它 - 使之變弱。只要主要所有者類,比如說視圖控制器,仍然存在 - 那麼屬性也是如此。如果兩者都被設置爲弱,那麼即使該屬性仍然出現,它仍然是空的,因爲在運行時,確定沒有人真的需要它,並且它被刪除。

0

只要至少有一個對該對象實例的強引用,ARC對象實例就處於活動狀態。

如果您將所有變量標記爲弱,則不會有強引用的對象實例,也不會有任何可以使其保持活動狀態。它會在創建後立即銷燬。

如果您對對象實例採取的不止一次引用,您必須考慮是否應將其標記爲弱或強(取決於特定的代碼),這是無法解決的。

1

這是因爲只要需要引用對象,只要需要引用的對象在內存中生存,就需要一個強引用。

(你可以回去的Objective-C,你可以手動執行,而不ARC所有作品,並做內存管理你自己的。顯然,這可以讓你欣賞ARC)

在另一方面,你可以問同樣的問題以獲得有力的參考。不同的是,當你只保留強引用(沒有弱引用)時,你不必考慮弱或強,它會起作用。 (弱單獨將很可能不起作用) 但是,然後你必須100%肯定爲你不再需要的每個對象的每個強引用都是空的。

附註: 當您將對象添加到集合(如數組或集合)時(或作爲視圖的子視圖),那麼這些集合對象將爲您保留強引用。在這種情況下,您不必關心,但可以丟棄該對象時從該集合中刪除該對象。這個「竅門」只有在你維護這些藏品時才適用 - 例如當它是關於作爲視圖層次的一部分的視圖時,只要它們是必需的。

相關問題