2012-06-19 45 views

回答

0

只需添加到其他意見,而很強的參考週期(以前稱爲保留週期)是很重要的理解,他們是比較少見的,除非你是在繞過指向父對象自己的孩子。如果你正在做這樣的事情,你應該確保你理解一些Apple文檔中概述的強參考週期(也稱爲保留週期)的討論,具體爲Acquire Basic Programming Skills,Advance Memory ManagementTransitioning to ARC。實際上,保留週期的常見例子是如果您將指向父控制器的指針傳遞給子控制器。在這些情況下,一般應該使這些指針爲weak,否則strong通常很安全。

弱引用的另一種常見情況是用於NIB或Storyboard中的控件的IBOutlets,它通常也應該是weak。 (如果您通過控制從Interface Builder中拖動到你的頭文件中的網點,將採取使他們weak爲你的照顧。)無論如何,我會從Resource Programming Guide引用,它說:

奧特萊斯通常應該是弱的,除了文件的所有者 到筆尖文件中的頂層對象(或者在iOS中,故事板場景) 應該很強。您創建應該會因此 通常是默認弱奧特萊斯,這是因爲:

  • 您創建,例如,一個視圖控制器的視圖或窗口控制器的窗口,子視圖是對象之間任意 引用奧特萊斯這並不意味着所有權。

  • 強大的插座通常由框架類指定(例如,UIViewController的視圖插座或NSWindowController的窗口插座)。

+0

看起來像沒有工具來監視參考計數器。你能告訴我哪個對象/視圖控制器或其他東西會被蘋果自動保留嗎?謝謝 ! –

+0

是的,retainCount方法在ARC中不可用(但由於您沒有手動保留和釋放,所以它不再那麼必要)。 iOS保留的東西的例子包括通過'pushViewController'或'presentViewController'添加到視圖控制器層次結構中的視圖控制器,使用'addSubview'將子視圖或控件添加到'UIView',或者當你添加一些東西到'NSArray'或'NSDictionary'。 – Rob

0

一般而言,除了避免保留週期外,您不必使用弱。也就是說,只要你沒有兩個對象強相互引用,你會沒事的。

1

當您希望該類保留對某個對象的所有權並因此防止該對象被釋放直到該類不再需要時使用強引用。它通常用於無法便宜複製的對象(例如從服務器下載的數據)或在課堂操作中至關重要的事物。

當您需要對象的引用時,使用弱引用。如果對象被其所有者解除分配,該對象將會消失。這通常用於循環引用,而不用擔心未釋放的對象。

+0

我不知道我是否應該把這個在一個單獨的問題或沒有,但我就在這裏問:如果我把我的應用程序只強引用,即使在我應該場所把弱引用,唯一的缺點是性能下降和使用更多的內存?對不起,如果我在錯誤的地方問了問題。 – pasawaya

+0

@qegal如果你創建保留週期,你將浪費內存,因爲保留週期對象永遠不能被釋放。除此之外,沒有區別。不管你做什麼,你都不會注意到任何性能。 – borrrden

+0

@borrrden:我認爲他會注意到,當他收到記憶警告。 – nhahtdh