美文网首页
iOS--ARC自动引用计数及weak弱引用管理

iOS--ARC自动引用计数及weak弱引用管理

作者: mayuee | 来源:发表于2021-03-12 15:48 被阅读0次

ARC自动引用计数

  • ARC 是 LLVMRuntime协作的结果。是编译器在 Runtime 的协作下,在对应的位置自动插入 retain 和 release的 操作。

  • ARC中禁止手动调用 retain、release、retainCount、dealloc等操作。类可以重写dealloc方法,但在方法中不能手动 [super dealloc]; 。

  • ARC中新增 weak、strong 属性关键字。

弱引用管理

__weak 修饰的 弱引用指针weakObj 引用了 alloc 的 obj:

{
    id obj = [id alloc] init];
    id __weak weakObj = obj;
}

编译后

{
    id weakObj;
    objc_initWeak(&weakObj, obj);
}

添加 weak 变量
objc_initWeak() ----> storeWeak() ----> weak_register_no_lock()
id
weak_register_no_lock(weak_table_t *weak_table, id referent_id,
id *referrer_id, bool crashIfDeallocating)
里面最终会传入了原对象 和 弱引用变量。函数会先通过原对象指针在弱引用表中通过哈希查找这个对象是否存在弱引用数组,如果这个弱引用数组存在,则在数组中添加这个弱引用变量。如果不存在,则创建这个数组,将弱引用变量添加到数组,并将数组添加到弱引用表中。

清除 weak 变量,weak 变量是如何置为 nil 的
清除 weak 变量时,同事设置为 nil 。
dealloc() -----> ....... -----> weak_clear_no_lock()
weak_unregister_no_lock(weak_table_t *weak_table, id referent_id,
id *referrer_id)
先在弱引用表中哈希查找这个被dealloc的对象是否存在弱引用数组,如果不存在,则不存在弱引用,不作处理。如果存在弱引用数组,则循环将弱引用指针置为 nil。

相关文章

  • iOS--ARC自动引用计数及weak弱引用管理

    ARC自动引用计数 ARC 是 LLVM 和 Runtime协作的结果。是编译器在 Runtime 的协作下,在对...

  • IOS中解决ARC类实例间循环引用(Swfit)

    一、几个用到的关键概念 弱引用(weak) :不会增加自动引用计数,必须为可选类型变量,因为弱引用在引用计数为0的...

  • 读书笔记 - 《Objective-C 高级编程 iOS 与 O

    第 1 章 自动引用计数 1.3 ARC 规则 __strong 强引用 (通常非显式使用) __weak 弱引用...

  • 2022-11-17 06内存管理

    引用计数管理 引用计数管理 clearDeallocating() 弱引用管理 自动释放池 1.是以栈为结点,通过...

  • Swift自动引用计数-可选链-协议-懒加载

    自动引用计数 循环引用 swift提供了两种解决方案• weak : 和OC中的__weak一样是一个弱引用....

  • weak与assign

    weak关键字的作用是弱引用,所引用对象的计数不会增加,并在引用对象释放的时候自动被置为nil weak是有run...

  • iOS中 weak 的原理

    weak 的作用 weak 关键字的作用弱引用,所引用对象的计数器不会加一,并在引用对象被释放的时候自动被设置为 ...

  • iOS 中 weak 实现原理

    weak 的作用 weak 关键字的作用弱引用,所引用对象的计数器不会加一,并在引用对象被释放的时候自动被设置为 ...

  • iOS底层weak的实现原理

    weak是弱引用,所引用对象的计数器不会加一,并在引用对象被释放的时候自动被设置为nil。那么weak的原理是什么...

  • iOS weak底层原理

    开发中,weak是弱引用,weak修改的对象引用计数不会加1,而且当对象销毁时候,会自动将对象指针置为ni...

网友评论

      本文标题:iOS--ARC自动引用计数及weak弱引用管理

      本文链接:https://www.haomeiwen.com/subject/djtzqltx.html