美文网首页
runtime实现weak

runtime实现weak

作者: 牛奶红茶 | 来源:发表于2018-04-14 09:57 被阅读0次

weak属性的特点:weak表明该属性定义了一种非拥有关系,为weak属性设置新值时,设置方法既不保留新值,也不释放旧值,同assign类似,然而在属性所指的对象释放的时候,属性值也会被清空


runtime是如何实现weak变量的的自动置nil?

weak对象会被放到一个hash表中,用weak指向的对象的内存地址作为key,当此对象的引用计数为0的时候会dealloc,假如weak指向的对象内存地址是addr,那么就会以addr为健,在这个weak表中搜索,找到所有以addr为健的weak对象,从而设置为nil


runtime对注册的类会进行布局,对于weak修饰的对象会放入到一个hash表中,用weak指向的对象内存地址作为key,当此对象的引用计数为0的时候会dealloc,假如weak指向的对象的内存地址是a,那么久会以a为健仔这个weak表中搜索,找到多有以a为健的对象,从而设置为nil


NSString*name = [[NSStringalloc] initWithString: @"Jiaming Chen"];

__weakNSString*weakStr = name;

当为weakStr这一weak类型的对象赋值时,编译器会根据name的地址为key去查找weak哈希表,该表项的值为一个数组,将weakStr对象的地址加入到数组中,当name变量超出变量作用域或引用计数为0时,会执行dealloc函数,在执行该函数时,编译器会以name变量的地址去查找weak哈希表的值,并将数组里所有weak对象全部赋值为nil。

相关文章

  • Runtime

    概述 runtime 是什么 isa指针 runtime 怎么添加属性,方法等 runtime 如何实现weak属...

  • 2020-09-28 技术回顾

    weak的实现原理 Runtime 维护了一个 weak表,用于存储指向某个对象的所有weak指针。weak表 其...

  • dailyLearning -- 关键字weak实现原理

    weak 实现原理的概括 Runtime维护了一个weak表,用于存储指向某个对象的所有weak指针。weak表其...

  • #2-weak 实现原理

    weak 实现原理的概括 Runtime维护了一个weak表,用于存储指向某个对象的所有weak指针。weak表其...

  • iOS-weak

    weak实现原理: Runtime维护了一个weak表,用于存储指向某个对象的所有weak指针。 weak表其实是...

  • Weak

    weak实现原理: Runtime维护了一个weak表,用于存储指向某个对象的所有weak指针。weak表其实是一...

  • 浅谈weak属性的理解

    weak实现原理: Runtime维护了一个weak表,用于存储指向某个对象的所有weak指针。weak表其实是一...

  • iOS日记4-weak关键字

    1.runtime中如何实现weak 生成weak对象 weak对象有一张weak表(类似引用计数表),是作为散列...

  • weak的实现原理及weak属性如何自动置nil的?

    weak的实现原理:runtime维护着一个weak表即hash表,用于存储指向对象的weak指针Weak表是Ha...

  • runtime实现weak

    weak属性的特点:weak表明该属性定义了一种非拥有关系,为weak属性设置新值时,设置方法既不保留新值,也不释...

网友评论

      本文标题:runtime实现weak

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