iOS 自動引用計數(ARC)

自動引用計數( ARC, Automatic Reference Counting),內存管理中對引用采取自動計數的技術。

在LLVM編譯器中設置 ARC 為有效狀態(tài),就無需再次鍵入 retain 或者是 release 代碼。
ARC.png

__strong、__weak、__autorealse的編譯器代碼

id __strong obj = [[NSObject alloc] init];
//編譯器代碼
id obj = objc_msgSend(NSObject,@seletor(alloc));
objc_msgSend(obj, @seletor(init));
objc_release(obj);

如附有 __weak 修飾符的變量所引用的對象被廢棄,則將 nil 賦值給該變量。
使用附有 __weak 修飾符的變量,即使用就會注冊到 autoreleasepool 中的對象。

id __weak obj1 = obj;
//編譯器代碼  weak 表為散列表(由于一個對象可以同時賦值給多個附有 __weak 修飾符的變量中,所以對于一個鍵值,可注冊多個變量地址)
id obj1;
objc_initWeak(&obj1, obj);      //將obj1的地址注冊到 weak 表中。
objc_destroyWeak(&obj1,0);  //把變量地址從 weak 表中刪除。

@autoreleasepool
{
    id __autorelease obj = [[NSObject alloc] init];
}
//編譯器的模擬代碼
id pool = objc_autoreleasePoolPush();
id obj = objc_msgSend(NSObject, @selector(alloc));
objc_msgSend(NSObject, @selector(init));
objc_autorelease(obj);
objc_autoreleasePoolPop(pool);
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容