0%

KVC,Key Value Coding,是一种通过字符串key来访问类属性的机制。不是通过调用setter、getter方法访问。

KVC和KVO都属于键值编程,而且底层实现机制都是isa-swizzing

变量捕获机制

  • 全局变量:不会捕获到block内部,直接访问。
  • auto基本类型的局部变量,捕获到block内部,生成成员变量来存储,以值传递的方式访问。
  • static类型的局部变量:捕获到block内部,生成成员变量来存储,以指针方式访问。
  • 对象类型的局部变量:连同它的所有权修饰符一起捕获。

OC的Runtime机制使得它可以被认为是一种动态语言。

Swift则取消了Runtime这个能力,让Swift称为一门静态语言。Swift语言的对象方法调用基本在编译期间就被确定,可以看做是一种硬编码形式的调用实现。这种机制加快了程序的运行速度、减少程序包体积,但在编译连接优化功能开启时反而又会出现增大包提及的情况。Swift在编译连接期间采用的是空间换时间的优化策略,以提高运算行速度为主要优化考虑点。

当一个对象被weak指针指向时,这个weak指针会以对象作为key,存储到SideTable的weak_table哈希表中。

  • Key:对象
  • Value:weak指针数组

基本原理:

  1. 后端把要发送的消息、目标设备标识打包,发送给APNS。
  2. APNS在已注册推送服务的设备列表中,查找符合标识的设备,把消息发送到设备。
  3. 设备把发送来的消息传递给相应的App,按照设定弹出推送通知。

  • isMemberOfClass:对象是否是某类型对象。
  • isKindOfClass:对象时否是某类型或类型子类的对象。
  • isSubclassOfClassisAncestorOfObject:类对象是否是另一个类型的子类、父类。
  • respondsToSelector:是否能响应某方法。
  • conformsToProtocol:是否遵循某协议。

classobject_getClass

Associative运行时特性可以给两个对象建立关联关系,这是一种从属关系。

相关API:

如果原来的类和分类中有相同的方法,那么最终执行的是分类方法。

编译完,每个分类都会生成一个category_t结构体,里面存储名称、对象方法列表、类方法列表、协议方法列表、属性列表。

概念

锁:在执行多线程时,用于强行限制资源访问的同步机制,即用于并发控制中保证对互斥要求的满足。

方法调用的流程:

objc_msgSend调用方法的本质是通过isa指针找到该类,然后寻找方法,找到后调用。如果没有找到则通过superClass找到父类,继续查找方法。