OC运行时01-MessageSend:

MessageSend:

1,在方法没有实现的时候不会报错,是因为OC运行时机制,在运行的时候才会动态监测,而c或者C++这类语言必须在定义的时候明确指明其类型,而不是等到运行过程动态监测,这类语言叫做静态语言
[cat play];

[cat playWithKid:@"zhangdanfeng"];

[IMCat play];

[IMCat playWithKid:@"zhangdanfeng"];
2,用稍微底层的方法performSeletor实现:
[cat performSelector:@selector(play)];

[cat performSelector:@selector(playWithKid:) withObject:@"zhangdanfeng"];

Class catClass = [cat class];

[catClass performSelector:@selector(play)];

[[IMCat class] performSelector:@selector(playWithKid:) withObject:@"zhangdanfeng"];
3,底层实际就是转成了messageSend方法,貌似iOS8之后底层方法被禁用了,如果需要打开,需要在Build Settings中禁用enable strict checking of Obj-c messageSend calls选项
objc_msgSend(cat, @selector(play));
objc_msgSend(cat, @selector(playWithKid:),@"zhangdanfeng");

objc_msgSend([IMCat class], @selector(play));
objc_msgSend([IMCat class], @selector(playWithKid:),@"zhangdanfeng");
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,969评论 19 139
  • Runtime就是运行时,也就是系统在运行过程中的一些机制。Objective-C就是运行时语言。对于C语言来说,...
    兰帕德阅读 474评论 0 0
  • Class 类型对象 OC本身是一种强类型语言,但其运行时功能让它又有了动态语言的特点。OC中对象的类型和对象所执...
    我是乔忘记疯狂阅读 1,459评论 3 16
  • 转载 运行时机制 runtime是一套比较底层的纯C语言的API, 属于C语言库, 包含了很多底层的C语言API。...
    John_LS阅读 2,150评论 1 8
  • TITLE: 编程语言乱炖 码农最大的烦恼——编程语言太多。不是我不学习,这世界变化快! 有时候还是蛮怀念十几、二...
    码园老农阅读 5,372评论 2 35