ios 弱引用

來源:互聯網
上載者:User

保留一個對象建立了一個對該對象的“強”引用。一個對象只有在它的所有強引用都被釋放後才能被回收。因此,一個對象的生命週期取決於其強引用的所有者。在某些情況下,這種行為可能並不理想。您可能想要引用一個對象而不妨礙對象本身的回收。對於這種情況,您可以擷取一個“弱”引用。弱引用是通過儲存一個指向對象的指標建立的,而不是保留對象。
    弱引用在可能會出現循環參考的情況下是必不可少的。例如,如果對象A和對象B互相通訊,兩者都需要引用對方。如果每個對象都保留對方對象,則這兩個對象只有在它們之間的串連中斷後才能被回收,但是它們之間的串連又只能在有對象被回收後才能中斷。為了打破這種迴圈,其中一個對象需要扮演從屬角色,得到另一個對象的一個弱引用。舉個具體的例子,在視圖層次中,父視圖擁有其子視圖,也因此能夠保留子視圖,但父視圖並不歸子視圖所有;然而子視圖仍需要知道誰是它的父視圖,因此它保持一個對其父視圖的弱引用。
    Cocoa中弱引用的其他適用情況包括:表格式資料源,大綱視圖項,通知觀察者以及其餘項目標和委託,但不僅限於上述情況。
在向您弱引用的對象發送訊息時,您需要小心謹慎。如果您在一個對象被回收之後向它發送訊息,您的應用程式將會崩潰。您必須為對象何時有效制定有明確界定的條件。在大多數情況下,被弱引用的對象知道其他對象對它的弱引用,這和循環參考的情況是一樣的,並且它還能夠在自己被回收時通知其他對象。例如,當您向通知中樞註冊一個對象的時候,通知中樞會儲存一個對該對象的弱引用,並且在適當的訊息發布時,還會向該對象發送訊息。當對象被回收時,您需要向通知中樞解註冊該對象,以防通知中樞向這個已經不存在的對象繼續發送訊息。同樣,當一個委派物件被回收時,您需要通過向其他對象發送一條帶nil參數的setDelegate:訊息來刪除委託連結。這些訊息通常由對象的dealloc方法發出。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.