码迷,mamicode.com
首页 > 移动开发 > 详细

iOS runtime探究(五): 从runtime开始深入weak实现机理

时间:2017-04-07 18:36:05      阅读:259      评论:0      收藏:0      [点我收藏+]

标签:细节   number   基本使用   property   .com   markdown   ref   append   阅读   

你要知道的runtime都在这里

转载请注明出处 http://blog.csdn.net/u014205968/article/details/67639341

本文主要讲解runtime相关知识,从原理到实践,由于包含内容过多分为以下五篇文章详细讲解,可自行选择需要了解的方向:

本文是系列文章的第五篇文章,也是系列文章的最后一篇从runtime开始: 深入weak实现机理,本文主要讲解runtime是如何实现weak修饰符的。
weak修饰符我们一点也不陌生在开发中经常用到,最主要的作用是为了防止引用循环(retained cycle),经常用于blockdelegate,在前面几篇文章中已经讲解了weak的基本使用和引用循环,如果有兴趣可以参考文章iOS @property探究(一): 基础详解iOS @property探究(二): 深入理解iOS block探究(一): 基础详解iOS block探究(二): 深入理解,相关方法和特点本文不再赘述了。

weak

weak不论是用作property修饰符还是用来修饰一个变量的声明其作用是一样的,就是不增加新对象的引用计数,被释放时也不会减少新对象的引用计数,同时在新对象被销毁时,weak修饰的属性或变量均会被设置为nil,这样可以防止野指针错误,本文要讲解的也正是这个特性,runtime如何将weak修饰的变量的对象在销毁时自动置为nil

那么runtime是如何实现在weak修饰的变量的对象在被销毁时自动置为nil的呢?一个普遍的解释是:runtime对注册的类会进行布局,对于weak修饰的对象会放入一个hash表中。用weak指向的对象内存地址作为key,当此对象的引用计数为0的时候会dealloc,假如weak指向的对象内存地址是a,那么就会以a为键在这个weak表中搜索,找到所有以a为键的weak对象,从而设置为nil

了解了以上知识后就可以深入runtiem代码来看看具体实现细节,有兴趣的读者可以继续阅读。

深入runtime理解weak

备注

由于作者水平有限,难免出现纰漏,如有问题还请不吝赐教。

iOS runtime探究(五): 从runtime开始深入weak实现机理

标签:细节   number   基本使用   property   .com   markdown   ref   append   阅读   

原文地址:http://blog.csdn.net/u014205968/article/details/67639341

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!