2017-03-15 89 views
2

所有權在過去的時間我試圖意識到Objective-C的內存管理,一旦我問自己以下問題:爭議與目標C

由於weak參考Objective-C的讓我們避免保留週期爲什麼不一直使用它們?

+1

如果一切都很微弱,就沒有任何東西會引用任何東西,所有的對象都會立即消失。 – rmaddy

+2

順便說一句 - 你指的是什麼「爭議」? – rmaddy

+0

@rmaddy,這意味着如果我使用弱引用創建兩個指向其他對象的對象,它們將立即消失? – user3524337

回答

3

一個對象只保留在內存中,而至少有一個對它的強(默認)引用。如果您只使用弱引用,則該對象將立即解除分配。

簡單地說,「弱」意味着:這個對象屬於別人,我只能訪問它,我不介意它是否消失。

2

Objective-C中的Weak引用讓我們避免保留週期,爲什麼不一直使用它們?

因爲只要沒有強引用,對象就會被釋放。

更重要的是,爲防止對象的重新分配,通常需要強大的引用。例如,視圖控制器最終對其視圖負責 - 讓控制器的視圖突然消失是沒有多大意義的。所以UIViewController的view屬性很強大。

保留週期發生在兩個對象各自具有強引用時。只要另一個對象保持強引用,任何對象都不能被釋放。如果你意識到這種情況,這並不是一個問題,因爲你可以通過消除任一參考來打破保留週期。然而,很容易讓而不是意識到這個循環,或忘記處理它,然後你有兩個對象在超出其使用壽命的時間內保持在內存中。使這些引用中的一個弱化可以消除這個問題,但這也意味着被引用的對象可能會被釋放,並且引用可能在任何時候都成爲零。實際上,這通常不是問題。