本文主要梳理iOS Objective-C 相关 核心知识
1.分类
2.关联对象
3.扩展
4.代理
5.通知
6.KVO
7.KVC
8.属性关键字
1.分类
分类都做了哪些事情
声明私有方法 分解体积较大的类文件 把Framework的私有方法公开
分类中都可以添加哪些内容
实例方法 类方法 协议 属性 (关联对象 类别)
特点
运行时决议
可以为系统类添加分类
类拓展可以添加实例变量,分类不能添加实例变量(因为在运行期,对象的内存布局已经确定,如果添加实例变量会破坏类的内部布局,这对编译性语言是灾难性的。)
名字相同的分类会引起编译错误
加载调用栈
_objc_init map_2_images map_images_nolock _read_images remethodizeClass
方法调用的优先级
同名方法,最后编译的分类中的方法会生效。方法调用的优先级:分类(最后参与编译的分类优先)->原来类->父类,既先去调用分类中的方法,分类中没有这个方法再去原来类中找,原来类中没有再去父类中找。
2.关联对象
函数
本质
由associationsManager管理并在associationsHashMap存储,所有对象的关联内容都在同一个全局容器中。
3.扩展
4.代理
5.通知
是使用观察者模式实现的用于夸层传递消息的机制
传递方式一对多
如何实现通知机制?
map表 key为通知名称 value 为observers_list
6.KVO
7.KVC
setValueForKey
正常设置 setName _setName setIsName
如果上边notfound 判断是否设置 accessInstanceVariablesDirectly = YES
_name _isName name isName
否则 crash
ValueForKey
正常获取
getKey key isKey _key
如果上边notfound 判断是否设置 accessInstanceVariablesDirectly = YES
_key _isKey key isKey
否则 crash