委託是什麼

日期:2021-10-24 分類:知識 投稿:zhao

最佳答案 委託和委託方雙方的property宣告屬性都是assign而不是retain為了避免迴圈引用造成的記憶體洩露迴圈引用的問題這樣理解 比如在main函式中建立了兩個類的物件A和B,現在引用計數是1。現在讓A和B互相引用A有一個屬性是B物件,屬性說明是retain。B有一個屬性是A物件,屬性說明是retain,現在兩個物件的引用計數都增加1,都變成了2。

委託是什麼

委託 一個物件儲存另一個物件的引用,被引用的物件實現了事先確定的協議,該協議用於將引用物件中的變化通知給被引用物件。 委託和委託方雙方的property宣告屬性都是assign而不是retain為了避免迴圈引用造成的記憶體洩露迴圈引用的問題這樣理解 比如在main函式中建立了兩個類的物件A和B,現在引用計數是1。
現在讓A和B互相引用A有一個屬性是B物件,屬性說明是retain;B有一個屬性是A物件,屬性說明是retain,現在兩個物件的引用計數都增加1,都變成了2。現在執行[A releasw];[B release];此時建立物件的main函式已經釋放了自己對物件的所有權,但是此時A和B的引用計數都還是1,因為他們互相引用了。
這使你發現A和B將無法釋放,因為要想釋放A必須先釋放B,在B的dealloc方法中再釋放A。同理,想要釋放B必須先釋放A,在A的dealloc方法中再釋放B。所以這兩個物件將一直存在記憶體中而不釋放,這就是所謂的迴圈引用的問題。