weak 此特質(zhì)表明該屬性定義了一種“非擁有關(guān)系” (nonowning relationship)。為這種屬性設置新值時砰盐,設置方法既不保留新值闷袒,也不釋放舊值。此特質(zhì)同 assign 類似岩梳, 然而在屬性所指的對象遭到摧毀時囊骤,屬性值也會清空(nil out)。
那么 runtime 如何實現(xiàn) weak 變量的自動置nil蒋腮?
runtime 對注冊的類淘捡, 會進行布局,對于 weak 對象會放入一個 hash 表中池摧。 用 weak 指向的對象內(nèi)存地址作為 key焦除,當此對象的引用計數(shù)為0的時候會 dealloc,假如 weak 指向的對象內(nèi)存地址是a作彤,那么就會以a為鍵膘魄, 在這個 weak 表中搜索乌逐,找到所有以a為鍵的 weak 對象,從而設置為 nil创葡。