美文网首页
weak的底层实现原理?

weak的底层实现原理?

作者: 拉布拉熊 | 来源:发表于2018-03-29 10:50 被阅读0次

1.何为weak?

weak 是oc中定义对象属性property时用于修饰对象属性的关键字。

2.weak有什么用处?

weak是弱引用,用weak修饰的对象计数器不会加1,并且在对象被释放时自动置为nil,大大避免了野指针访问导致崩溃的问题;另外weak还可用于解决delegate的循环引用;自定义的IBOutlet对象也使用weak(因为subviews数组已经对该对象进行了强引用,不需要再对其进行强引用了)。

3.weak的实现原理?

weak表是一个hash表,key指向对象的地址,value指向weak指针的地址数组(对象可能被多个weak指针弱引用);

runtime机制来维护这个hash表,详细步骤如下:

第一步:初始化时,runtime调用objc_initWeak函数,初始化一个新的weak指针指向对象的地址;

第二步:添加引用时,objc_initWeak函数会调用objc_storeWeak函数更新指针的指向,创建对应的弱引用表;

第三步:释放时,调用clearDeallocating函数:根据key(对象的地址),找到对应的value(指向该对象的所有weak指针的地址数组),遍历这个数组,把所有的weak指针置为nil;最后删除weak表,清理对象记录.

当对象的引用计数为0时,调用dealloc函数,以对象的内存地址为key,到hash表中找到对应的存放weak指针地址的数组,遍历数组,并将weak指针置为nil;最后删除hash表,清理对象记录.

参考链接:http://www.cocoachina.com/ios/20170328/18962.html

相关文章

  • iOS底层原理:weak的实现原理

    iOS底层原理:weak的实现原理iOS底层原理:weak的实现原理

  • iOS weak 底层实现原理(二):objc-weak 函数列

    前言 为了全面透彻的分析 weak 的实现原理,前面 iOS weak 底层实现原理(一):SideTable|s...

  • weak底层实现原理

    一、weak基本用法 weak是弱引用,用weak来修饰、描述所引用对象的计数器并不会加1,而且weak会在引用对...

  • weak 底层实现原理

    总结:weak 是Runtime维护了一个hash(哈希)表,用于存储指向某个对象的所有weak指针。weak表其...

  • weak底层实现原理

    前言 weak用于一些对象相互引用的时候,避免出现强强引用,对象不能被释放,出现内存泄露的问题。 weak 关键字...

  • weak底层实现原理

    一、weak 基本用法 weak 是弱引用,用 weak 来修饰、描述所引用对象的计数器并不会增加,而且 weak...

  • IOS基础知识-weak原理篇

    weak底层原理 首先需要看下weak编译后的实现,比如有如下代码: 在通过clang编译后,代码实现如下: 编译...

  • weak的底层实现原理?

    1.何为weak? weak 是oc中定义对象属性property时用于修饰对象属性的关键字。 2.weak有什么...

  • weak

    weak的底层实现weak 弱引用的实现方式

  • iOS 中 weak 的实现原理

    开头 本文是看了 iOS 底层解析weak的实现原理(包含weak对象的初始化,引用,释放的分析) 一文后,为了加...

网友评论

      本文标题:weak的底层实现原理?

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