语言特性

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:
语言特性
语言特性
语言特性
语言特性
语言特性
语言特性