iOS知识点个人归纳总结--OC语言相关

302 阅读1分钟

分类

分类数据结构

  • 运行时
  • 包含类方法、对象方法、协议、属性列表
  • 会在程序启动Runtime环境初始化的时候,扫描分类并将分类方法(协议/属性)数组 倒序 排列,然后拼接到类对象数据结构的方法(协议/属性)中。所以分类方法可以“覆盖”原类方法(实际上是因为分类方法在前直接调用分类方法而不是真正的覆盖,原类方法还存在)。

关联对象

关联对象存储结构

类扩展

  • 编译时
  • 一般用来声明私有成员变量、属性、方法(不常见)
  • 一般寄宿在类的.m文件中

代理

  • 代理模式的应用
  • 委托方-协议-代理方
  • weak避免循环引用
  • 通常委托方和代理方是一对一的(多播代理可以一对多)

通知

通知的简单实现

  • 观察者模式的应用
  • 通知可以跨层传递,通常为一对多

KVO

  • 动态生成被观察者的子类并重写相应setter方法,isa指向动态生成的子类
  • 直接给成员变量赋值是不能触发KVO的,需要手动调用系统提供的willSetValueForKey与didSetValueForKey来触发

KVC

通过查找类属性对应的getter/setter方法(找不到->成员变量)来实现,同时NSObject有一个accessInstanceVariablesDirectly的属性控制在没有找到对应方法时是否继续查找成员变量。如果没有找到则抛出错误。

属性关键字

  • 原子性:atomic、nonatomic
  • 读写权限:readonly、readwrite
  • 引用计数:assign(unsafe_unretained)、strong(retain)、weak、copy
  • 类属性:class
  • 要注意copy关键字对于对象的拷贝问题,要注意引用计数相关的属性关键字对应的setter的写法不同