语言特性
Category
分类用法:
1、声明私有方法
2、分解体积庞大的类文件
3、framework的私有方法公开化
分类:
1、运行时决议、系统类添加
2、可以添加
a:实例方法、
b:类方法、
c:协议、
d:属性(只是声明get、set,并未添加实例变量,可以通过关联对象添加实例对象)
3、加载调用栈
4、源码分析
同名方法在不同分类中,最后编译的会生效
首先获取全部的分类方法,进行组装,再拼接到原类上,会覆盖宿主类同名方法
关联对象
可以为分类添加成员变量【为分类添加实例变量的相同效果】
AssociationsManager 管理全局的关联对象
存储样式
扩展
作用:
1、声明私有属性
2、声明私有方法
3、声明私有成员变量
和分类的区别
编译时决议
只以声明的形式存在、寄生在宿主.m
不可以给系统类添加扩展
代理
一种软件设计模式
@Protocol
一对一
通知
使用观察者模式实现跨层传递消息
一对多
KVO
key-value observe
通过KVC可以使KVO生效
通过成员变量直接赋值无法生效,无法触发KVO,可以通过willChangeValueForKey 和 didChangeValueForKey 手动实现
KVC 会破坏面向对象的思想
key-value coding
valueForKey系统实现
setValue ForKey
属性关键字
读写: readonly readwrite
原子性:atomic nonatomic
引用计数: retain strong assign unsafe_unretain weak copy
assign:
1、修饰基本数据类型、
2、修饰对象类型,引用计数不增加
3、会产生悬垂指针,指针不释放
weak:
1、不改变对象引用计数
2、对象释放,自动置nil
copy: