• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >ios > iOSruntime探究(五):从runtime开始深入weak实现机理

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

作者:什么都不会的小菜鸟 字体:[增加 减小] 来源:互联网 时间:2017-07-23

什么都不会的小菜鸟通过本文主要向大家介绍了ios,面向对象,class等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

你要知道的runtime都在这里

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

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

  • 从runtime开始: 理解面向对象的类到面向过程的结构体
  • 从runtime开始: 深入理解OC消息转发机制
  • 从runtime开始: 理解OC的属性property
  • 从runtime开始: 实践Category添加属性与黑魔法method swizzling
  • 从runtime开始: 深入weak实现机理

本文是系列文章的第五篇文章,也是系列文章的最后一篇从runtime开始: 深入weak实现机理,本文主要讲解runtime是如何实现weak修饰符的。
weak修饰符我们一点也不陌生在开发中经常用到,最主要的作用是为了防止引用循环(retained cycle),经常用于block和delegate,在前面几篇文章中已经讲解了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

备注

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

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 代码持续更新tableview与用户滑动tableview冲突?
  • 为什么NSMutableArray继承于NSArray
  • 制作的framework项目含masonry,如何处理避免冲突
  • IOS有没有类似安卓的AccessibilityService功能
  • UITableViewCell加载多张图片导致内存异常暴增
  • iOS,我在Githubfork别人的仓库后更改了代码,可以用CocoaPods把我的仓库加入项目里吗?
  • iOS根视图切换到一个新的根视图时,该如何释放之前的根视图?
  • 关于时间戳转换为NSDate和标准格式
  • iOSAPP后台运行收到推送语音播报无效急急急!!!
  • 黑屏屏保ios横屏偶尔一半黑屏的bug是可以解决的吗

相关文章

  • 2017-06-05 如何实现中国梦afnetwork如何实现同步请求
  • 2017-06-05 水果忍者变态版ipa没有开发者账号打包ipa无法安装应用
  • 2017-06-05 请大神指点迷津数据可以赋值到控件上,但是一滑动tableView就工程就崩溃了
  • 2017-06-05 参数Swiftselector参数问题
  • 2017-06-05 下面是服务端加密的方法,ios端怎样做能得到和它一样返回的byte?
  • 2017-06-05 SwiftBool解包判断问题
  • 2017-06-05 七牛图片上传成功后根据返回地址无法获取图片,之前都是好的
  • 2017-06-05 问天问地问自己swift标准库中协议的相关问题
  • 2017-06-05 二维数组OC二维数组替换元素的问题?
  • 2017-06-05 APP上如何实现特定目的网络请求的转发和代理

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • macbook用终端安装cocoapods时出问题后来“gem”指令失效
    • 正比例反比例iOS单例创建的一点疑惑
    • iosstatusbar背景透明能看到下层view的数据
    • iOS下UIWebView数据显示在滑动时不更新的问题
    • (swift)关于Masonry为什么不会造成循环引用的问题
    • ReactnativeListView数据源设置(dataSource)
    • iOS基础控件关于iOS设置代理问题
    • 如何实现中国梦如何实现评论回复多次?
    • 当前页面的脚本发生错误iOS动态更新页面的问题
    • iosswift多个界面,viewcontroller应该怎么写呢?纯代码

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有