首页
Web开发
Windows程序
编程语言
数据库
移动开发
系统相关
微信
其他好文
会员
首页
>
其他好文
> 详细
runloop和runtime小结
时间:
2016-07-15 19:57:10
阅读:
199
评论:
0
收藏:
0
[点我收藏+]
标签:
runloop运行循环
1;是个死循环,主线程默认开启,子线程不开启
2;保证程序不退出
3;监听事件,应用场景
1;定时器,时钟,NSTimer,CADisplayLink
2;监听网络端口数据的接收和发送情况,socket开发
iOS 中所有的事件监听全部由运行循环负责
主线程的 RunLoop 在应用启动的时候就会自动创建
其他线程则需要在该线程下自己启动
不能自己创建 RunLoop
RunLoop 并不是线程安全的,所以需要避免在其他线程上调用当前线程的 RunLoop
RunLoop 负责管理 autorelease pools
RunLoop 负责处理消息事件,即输入源事件、计时器事件和网络请求事情
runtime运行时
是OC面向对象编程语言的运行环境,类似java的虚拟机
runtime是OC的底层实现,OC代码最终转换为runtime的C语言库的东西
比如类转换为runtime中的结构体等数据结构
方法转换为C语言中的函数,调用方法都是转成了objc_msgSend() 函数,是消息机制
导入头文件<objc/message.h><objc/runtime.h>
runtime可以做的事情:
获取类中的成员变量
为类动态的增加成员变量
动态改变类的方法实现
为类动态的增加新的方法
运行时的运用场景:
1;分类category,动态获取类的属性数组
为类动态添加属性
分类中导入objc,class_copyIvar-method-propertyList-protocol,运行时方法获得类属性列表
在分类中写的类方法,+(NSArray *)cz_objProperties{}获得类的属性数组
1;建立分类方法,类方法
2;class_copyPropertyList获取类属性数组
3;遍历数组,
4,property_getName获得数组名字
5;转为OC的字符串NSStringWithCString:加入到数组
6;free(proList)注意释放,retain/creat/copy
2;字典转模型,动态获取类的属性数组,通过KVC设置数值
分类中的+(instance)cz_objectWithDict{}把外面VC的字典转为模型对象
1;获取属性列表
2;遍历字典enumerate...,获得key,value,
3;判断key是否在属性数组中[ proList containsObject:key]
是的话,用KVC赋值,setValue forKey:
4;字典转模型,写到了分类方法里,模型里只有属性,简洁
把分类拖入,所有的对象都具有了这个方法
所有字典转模型框架的写法,会考虑到字典的嵌套
3;给分类,增加关联对象,开发框架时解耦
利用关联对象,提高效率
动态添加属性
1;objc_getAssociatedObject:调用运行时方法前,判断属性数组是否获取,获取就直接返回
2;运行时获取属性数组
3;objc_setAssociatedObject:动态创建属性,记录属性数组
好处是,不用每次都调用运行时方法,提高效率
4;利用运行时交叉方法 method swizzling
1;执行自己的方法
2;然后执行系统或者第三方框架的方法
3;黑魔法,依赖系统/框架的版本,一旦改变就不好了
AFN交叉了系统的resume,suspend,af_resume
runloop和runtime小结
标签:
原文地址:http://www.cnblogs.com/hanfengs/p/5674488.html
踩
(
0
)
赞
(
0
)
举报
评论
一句话评论(
0
)
登录后才能评论!
分享档案
更多>
2021年07月29日 (22)
2021年07月28日 (40)
2021年07月27日 (32)
2021年07月26日 (79)
2021年07月23日 (29)
2021年07月22日 (30)
2021年07月21日 (42)
2021年07月20日 (16)
2021年07月19日 (90)
2021年07月16日 (35)
周排行
更多
分布式事务
2021-07-29
OpenStack云平台命令行登录账户
2021-07-29
getLastRowNum()与getLastCellNum()/getPhysicalNumberOfRows()与getPhysicalNumberOfCells()
2021-07-29
【K8s概念】CSI 卷克隆
2021-07-29
vue3.0使用ant-design-vue进行按需加载原来这么简单
2021-07-29
stack栈
2021-07-29
抽奖动画 - 大转盘抽奖
2021-07-29
PPT写作技巧
2021-07-29
003-核心技术-IO模型-NIO-基于NIO群聊示例
2021-07-29
Bootstrap组件2
2021-07-29
友情链接
兰亭集智
国之画
百度统计
站长统计
阿里云
chrome插件
新版天听网
关于我们
-
联系我们
-
留言反馈
© 2014
mamicode.com
版权所有 联系我们:gaon5@hotmail.com
迷上了代码!