只要學(xué)過 iOS 的人,都會對 strong、weak、copy等關(guān)鍵字應(yīng)該都會很熟悉。weak 屬性關(guān)鍵字就是弱引用,它不會增加引用計數(shù)但卻能保證指針的安全訪問,在對象釋放后置為 nil,從而避免錯誤的內(nèi)存訪問。主要為了解決循環(huán)引用的問題。
10年積累的網(wǎng)站制作、成都做網(wǎng)站經(jīng)驗,可以快速應(yīng)對客戶對網(wǎng)站的新想法和需求。提供各種問題對應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識你,你也不認(rèn)識我。但先建設(shè)網(wǎng)站后付款的網(wǎng)站建設(shè)流程,更有平壩免費網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。接下來,我們會從 objc 庫中的 NSObject.mm、 objc-weak.h 以及 objc-weak.mm 文件出發(fā),去具體了解 weak 的實現(xiàn)過程。
weak 的內(nèi)部結(jié)構(gòu)
Runtime 維護了一個weak表,用于存儲指向某個對象的所有weak指針。weak 表是由單個自旋鎖管理的散列表。
weak表其實是一個hash表,key 是所指對象的指針,value是weak指針的地址(這個地址的值是所指向?qū)ο蟮牡刂罚?shù)組。
在下面涉及的源碼中,我們會看到以下幾個類型:
sideTable、weak_table_t、weak_entry_t 這幾個結(jié)構(gòu)體。
struct SideTable { // 自旋鎖,用來保證線程安全 spinlock_t slock; // 引用計數(shù)表 RefcountMap refcnts; // weak 表 weak_table_t weak_table; ... };
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)建站www.cdcxhl.com,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機、免備案服務(wù)器”等云主機租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。