__weak如何實現物件值自動設定為nil的

weixin_34293059發表於2018-04-08

詳情請檢視:http://blog.csdn.net/hherima/article/details/38661803

總結如下:

weak的功能:

* 若使用__weak修飾符的變數引用物件被廢棄時,則將nil賦值給該變數

* 使用附有__weak修飾符的變數,就是使用註冊到autoreleasepool的物件

ARC物件釋放的過程:

1. objc_release

2. 因為引用計數為0所以執行dealloc

3. _objc_rootDealloc

4. object_dispose

5. objc_destructInstance

6. objc_clear_deallocating

而,呼叫objc_clear_deallocating的動作如下:

1. 從weak表中獲取廢棄物件的地址為鍵值的記錄。

2. 將包含在記錄中的所有附有__weak修飾符變數的地址,賦值為nil

3. 從weak表中刪除記錄

4. 從引用計數表中刪除廢棄物件的地址作為鍵值的記錄

相關文章