美文网首页
weak和assign区别 与weak的原理

weak和assign区别 与weak的原理

作者: 佟掌柜666 | 来源:发表于2018-06-29 14:55 被阅读0次

weak和assign是一种“非拥有关系”的指针,通过这两种修饰符修饰的指针变量,都不会改变被引用对象的引用计数。但是在一个对象被释放后,weak会自动将指针指向nil,而assign则不会。

在iOS中,向nil发送消息时不会导致崩溃的,所以assign就会导致野指针的错误unrecognized selector sent to instance。

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

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

相关文章

网友评论

      本文标题:weak和assign区别 与weak的原理

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