您的位置:首页 > 其它

[Runtime]-发送消息

2016-08-03 00:00 106 查看
摘要: Runtime发送消息的过程、原理、作用、等等使用

1:任何方法调用的本质:

发送一个消息,用Runtime发送消息,OC底层的实现就是使用Runtime去实现的.

2:怎样验证:方法调用,是否真的是转化为消息机制呢?

> 01-最终生成消息机制,是编译器做的事情
> 02-如果想看最终代码,需要把当前代码重新编译,使用xcode编译器:clang编译器去重新编译就可以看到

使用clang编译器去查看最终的消息机制代码步骤?

>: 打开xcode新建工程-->选择OS X、Application-->Command Line Tool-->创建一个命令行工程
>: 然后在main.m文件中,创建对象,如:

#import <Foundation/Foundation.h>

int main(int argc, const char * argv[]) {
@autoreleasepool {
id objc = [NSObject alloc];
objc = [objc init];
}
return 0;
}

>: 打开终端:进入该工程中的目录下,main.m的上一级目录,cd +(目录下)

>:使用这个命令:clang -rewrite-objc main.m ,就会在main.m同级目录下生成一个main.cpp文件,打开双击就可以看到最终的代码:按住command + f--->搜索autoreleasepool-->就可以看到创建对象的那两行代码的消息机制代码

3:根据以上论证,我们可以自己测试使用,具体步骤?

> 使用Runtime运行时第一步:导入头文件 :#import <objc/message.h>

#import <objc/message.h>

> xcode6之前,苹果允许我们使用objc_msgSend,而且是有参数提示的;xcode6,苹果不再推荐我们使用runtime

解决参数提示配置:工程文件-->BuildSetting-->搜索msg-->修改为NO即可

测试代码:

- (void)viewDidLoad {
[super viewDidLoad];
/**
* 1:使用运行时去测试第一步:导入头文件  #import <objc/message.h>
* 2:xcode6之前,苹果允许你使用objc_msgSend(),而且有参数提示
xcode6,苹果不推荐我们使用runtime
解决参数提示配置:工程文件-->buildSetting-->搜索msg-->修改为NO即可
*/

/**
*  1:类方法本质:类对象调用[NSObject class]
*/

// id:谁发送消息
// SEL:发送什么消息
//id objc = [NSObject alloc];
id objc = objc_msgSend([NSObject class], @selector(alloc));

//objc = [objc init];
objc = objc_msgSend(objc, @selector(init));

}


意见反馈邮件:1415429879@qq.com

欢迎你们的阅读和赞赏、谢谢
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息