runtime 如何實現 weak 屬性

weak 此特質表明該屬性定義了一種“非擁有關系” (nonowning relationship)。為這種屬性設置新值時,設置方法既不保留新值,也不釋放舊值。此特質同 assign 類似, 然而在屬性所指的對象遭到摧毀時,屬性值也會清空(nil out)。

那么 runtime 如何實現 weak 變量的自動置nil?

runtime 對注冊的類, 會進行布局,對于 weak 對象會放入一個 hash 表中。 用 weak 指向的對象內存地址作為 key,當此對象的引用計數為0的時候會 dealloc,假如 weak 指向的對象內存地址是a,那么就會以a為鍵, 在這個 weak 表中搜索,找到所有以a為鍵的 weak 對象,從而設置為 nil。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 要實現weak屬性,首先要搞清楚weak屬性的特點: weak 此特質表明該屬性定義了一種“非擁有關系” (non...
    SessionSinGod閱讀 1,337評論 0 2
  • 要實現 weak 屬性,首先要搞清楚 weak 屬性的特點: weak 此特質表明該屬性定義了一種“非擁有關系” ...
    狗狗臭雞蛋閱讀 851評論 1 0
  • runtime對注冊的類,會進行布局,對于weak對象會放入一個hash表中,用weak指向的對象內存地址作為ke...
    RFeng閱讀 375評論 0 1
  • 我突然想起了秀秀,那個溫婉如水的南方姑娘。 秀秀是廣東人,典型的南方姑娘:身材嬌小,五官如她名字般清秀,不...
    或淡或雅閱讀 349評論 0 0
  • 感恩父母養(yǎng)育之恩愿母親身體健康衣食無憂智慧增長!感恩弟弟陪伴母親讓我有時間做其他事情!感恩姐夫對姐姐無微不至的關心...
    T上善若水閱讀 322評論 0 0