1 2 3 4 5 6 7 8 9 10 | #import "ViewController.h" #import @interface NSMutableArray (SA) @end @implementation NSMutableArray (SA) + (void)load { static dis[......]<p class="read-more"><a href="https://www.yusian.com/blog/project/2018/11/23/0906261409.html">继续阅读</a></p> |
Tag Archives: runtime
Leave a reply
使用Runtime动态创建一个类
关键代码:
1 2 3 4 5 6 7 8 9 10 | #import "ViewController.h" #import @interface ViewController () @end @implementation ViewController - (void)viewDidLoad { [supe[......]<p class="read-more"><a href="https://www.yusian.com/blog/project/2018/11/23/0903501405.html">继续阅读</a></p> |
Objective-C消息发送机制原理objc_msgSend( )
0、方法调用原理
0.1、以[reciver method]为例,实际上是objc_msgSend(reciver, @selector(method), …argments);
0.2、OC方法调用转换为objc_msgSend函数调用,方法调用者、方法名为该函数的前2个参数;
0.3、OC对象本质为结构体,参考:剖析Objective-C对象本质结构MJClassInfo
1、消息发送(查找方法)
1.1、如果方法调用者为nil,直接返回(不报错);
2.2、方法调用者通过isa指针查找方法接收者,方法接收者查找对象中的cache,如果没有则查找对象中方法列表class_rw_t;
2.3、如果找到则调用并缓存在cache中,否则通过superclass在父类中的cache,class_rw_t中查找;
2.4、如果找到则调用并缓存在cache中,否则再通过superclass的superclass查找,直到superclass为空;
2.5、如果在整个继承体系中都没有找到目标方法,调用方法接收者的动态解析方法(如果解析过则进入方法转发);
2、动态解析[……]
剖析Objective-C对象本质结构MJClassInfo
1 2 3 4 5 6 7 8 9 10 11 | // // MJClassInfo.h // TestClass // // Created by MJ Lee on 2018/3/8. // Copyright © 2018年 MJ Lee. All rights reserved. // #import #i[......]<p class="read-more"><a href="https://www.yusian.com/blog/project/2018/11/15/1139191393.html">继续阅读</a></p> |
block本质
1、写一个简单的mac命令行程序,包含block定义与使用
1 2 3 4 5 | #import int main(int argc, const char * argv[]) { @autoreleasepool { void (^block)(void) = ^{[......]<p class="read-more"><a href="https://www.yusian.com/blog/project/2018/11/13/0925191388.html">继续阅读</a></p> |