Objc

分类(category)


分类能够干啥:

  • 声明私有方法
  • 分解体积庞大的类文件
  • 拓展Framework的方法

分类中可以添加哪些内容?

  • 实例方法
  • 类方法
  • 协议
  • 属性(get set方法, 非实例变量)
  • 关联对象(伪成员变量)

特点:

  • 运行时决议
  • 分类方法会覆盖原类方法
  • 同名分类方法谁能生效取决于编译顺序
  • 名字相同的分类会引起编译报错

扩展(extension)

特点

  • 编译时决议
  • 只以声明的形式存在, 多数情况寄生于宿主类的.m中
  • 不能为系统类添加扩展

代理 (delegate)

  • 一种软件设计模式
  • iOS中以@protocol形式体现
  • 一对一
  • 一般声明为weak以规避循环引用

通知 (Notification)

  • 使用观察者模式来实现的用于跨层传递消息的机制
  • 传递方式一对多

KVO

  • 是观察者设计模式的又一实现
  • Apple使用了isa混写(isa-swizzling)来实现KVO
  • 使用setter方法改变值KVO才会生效
  • 使用setValue:forKey:改变值KVO才会生效
  • 成员变量直接修改需要手动添加KVO(基于KVC)才会生效

KVO

  • get
  • set

属性关键字

读写权限

  • readonly
  • readwrite

原子性

  • atomic
  • nonatomic

引用计数

  • retain/strong
  • assign/unsafe_unretained
  • weak
  • copy

assign特性

  • 修饰基本数据类型
  • 修饰对象类型时, 不改变引用计数
  • 会产生悬垂指针

weak特性

  • 不改变修饰对象的引用计数
  • 所指对象被释放后会自动置为nil

copy特性
浅拷贝: 引用计数+1
深拷贝: 开辟了新的内存空间