在runtime中,isEqual:方法实际实现为直接判断类的self是否相等,以“==”直接进行判断。
runtime源码实现 Xcode新项目实现一个类的哈希值由其指针强转得出。
runtime源码实现 runtime源码实现 Xcode新项目实现类的superclass和class指向Class(objc_class)的结构体。
runtime源码实现 runtime源码实现 runtime源码实现 Xcode新项目实现class与superclass虽然打印值貌似意思相同,但获取方式不同,superclass直接通过结构体中superclass获取,而class通过位运算操作后,在表中读取。
runtime源码实现 runtime源码实现 runtime源码实现 runtime源码实现 Xcode新项目实现2018-10-27更新
isProxy可以在一些情况下改变isKindOfClass:或isMemberOfClass:的返回值?默认为NO。
实际测试重写后没有改变结果。
runtime源码实现 Xcode新项目实现消息传递一直是iOS实现原理中的重点,由于没有接触过汇编,所以底层真实实现无法得出结论。
传递消息时有四种方法,objc_msgSend,objc_msgSendSuper,objc_msgSend_stret,objc_msgSendSuper_stret,
前两种会返回原类,后两种会返回结构体。
当SEL为空时,直接崩溃。
runtime源码实现 runtime源码实现 Xcode新项目实现2018-10-29更新
isProxy表示是否为父类代理人,默认为NO,重写为YES时在isKindOfClass:中判断与父类相等。
runtime源码实现 runtime源码实现 Xcode新项目实现isProxy在官方文档中表示也会影响isMemberOfClass:的判断,实际测试结果没有影响。(也许需要什么特定条件?)
isMemberOfClass:为直接获取类名与传入比较,返回比较结果。
runtime源码实现 Xcode新项目实现2018-10-31更新
conformsToProtocol:循环比较自己、父类至根类协议列表,判断是否包含协议。
中间判断了类是否被实现,若没有实现会发生崩溃。与后面有所区别。
runtime源码实现 runtime源码实现 runtime源码实现 runtime源码实现 Xcode新项目实现后续更新中。
网友评论