iOS 自动引用计数(ARC)

自动引用计数( ARC, Automatic Reference Counting),内存管理中对引用采取自动计数的技术。

在LLVM编译器中设置 ARC 为有效状态,就无需再次键入 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);
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容