KVC,Key Value Coding,是一种通过字符串key来访问类属性的机制。不是通过调用setter、getter方法访问。
KVC和KVO都属于键值编程,而且底层实现机制都是isa-swizzing。
KVC,Key Value Coding,是一种通过字符串key来访问类属性的机制。不是通过调用setter、getter方法访问。
KVC和KVO都属于键值编程,而且底层实现机制都是isa-swizzing。
OC的Runtime机制使得它可以被认为是一种动态语言。
Swift则取消了Runtime这个能力,让Swift称为一门静态语言。Swift语言的对象方法调用基本在编译期间就被确定,可以看做是一种硬编码形式的调用实现。这种机制加快了程序的运行速度、减少程序包体积,但在编译连接优化功能开启时反而又会出现增大包提及的情况。Swift在编译连接期间采用的是空间换时间的优化策略,以提高运算行速度为主要优化考虑点。
当一个对象被weak指针指向时,这个weak指针会以对象作为key,存储到SideTable的weak_table
哈希表中。
基本原理:
isMemberOfClass
:对象是否是某类型对象。isKindOfClass
:对象时否是某类型或类型子类的对象。isSubclassOfClass
、isAncestorOfObject
:类对象是否是另一个类型的子类、父类。respondsToSelector
:是否能响应某方法。conformsToProtocol
:是否遵循某协议。class
与object_getClass
:
Associative运行时特性可以给两个对象建立关联关系,这是一种从属关系。
相关API:
如果原来的类和分类中有相同的方法,那么最终执行的是分类方法。
编译完,每个分类都会生成一个category_t结构体,里面存储名称、对象方法列表、类方法列表、协议方法列表、属性列表。
锁:在执行多线程时,用于强行限制资源访问的同步机制,即用于并发控制中保证对互斥要求的满足。
方法调用的流程:
objc_msgSend
调用方法的本质是通过isa指针找到该类,然后寻找方法,找到后调用。如果没有找到则通过superClass
找到父类,继续查找方法。