load initialize 方法的区别1.调用的方式 - load 根据函数地址调用 - initialize 通过objc_msgsend调用 2.调用时刻 - load runtime 加载类,分类的时候调用(只会调用1次) - initialize 是类第一次接受消息的时候调用,每个类只会 ...
分类:
其他好文 时间:
2020-07-03 19:47:25
阅读次数:
55
前言:在引入<objc/runtime.h> 与 <objc/message.h> 后,调用objc_msgSend(),会报如下错误: 报错原因: 从Xcode6之后,苹果不推荐我们使用runtime,所以就取消了参数提示功能。 修改方法:按照如上图的方式操作,搜索msg,并把YES改成NO即可。 ...
分类:
其他好文 时间:
2018-11-12 11:33:32
阅读次数:
220
1. 在 Xcode 6 版本以上编译报错问题 在 LLVM 6.0 中增加了一个 OBJC_OLD_DISPATCH_PROTOTYPES 宏,默认配置在 Target -> Build Settings -> Apple LLVM 6.0 - Preprocessing -> Enable St ...
分类:
其他好文 时间:
2018-10-13 15:42:20
阅读次数:
263
class_addMethod #import "Person.h" #import <objc/message.h> @implementation Person /* OC的方法调用,会传递两个隐式参数!给IMP(方法实现)!! objc_msgSend(self,_cmd); id self ...
分类:
其他好文 时间:
2018-06-29 11:08:40
阅读次数:
180
//Person * p = [[Person alloc] init]; //alloc :分配内存空间 init:初始化对象,属性&方法 //苹果不建议我们使用Objc_msgSend , 在build-setting 搜索 msg 打开 //导入 #import <objc/message.h ...
分类:
其他好文 时间:
2018-06-29 00:06:05
阅读次数:
174
nil的处理展示出消息机制的优越性,相对于函数调用的空指针处理。 ENTRY objc_msgSend # check whether receiver is nil teq a1, #0 itt eq moveq a2, #0 bxeq lr # save registers and load r ...
分类:
其他好文 时间:
2018-02-06 14:23:29
阅读次数:
194
消息发送:对象处理消息; 消息发送的selector作为消息的一部分,在对象的运行时底层参与了消息分发,最终完成动态函数调用。 objc_msgSend(void /* id self, SEL op, ... */ ) id objc_msgSend ( id self, SEL op, ... ...
分类:
其他好文 时间:
2018-02-02 14:32:21
阅读次数:
141
objc_msgSend(obj,normalSelector,command) 只支持32位如果在64位可能出现类的赋值出错 如: 假如 obj 是CDVPlugin类 normalSelector 是一个方法选择器(即@selector(方法名))该方法的参数是 command(CDVInvok ...
分类:
移动开发 时间:
2017-12-21 17:17:07
阅读次数:
188
近期了解了一下OC的Runtime,真的是OC中非常强大的一个机制,看起来比較底层,但事实上能够有非常多活用的方式。 什么是Runtime 我们尽管是用Objective-C写的代码,事实上在运行过程中都会被转化成C代码去运行。比方说OC的方法调用都会转成C函数 id objc_msgSend ( ...
分类:
其他好文 时间:
2017-08-17 12:35:03
阅读次数:
155
http://www.jianshu.com/p/95c8cb186673 在OC中,我们对方法的调用都会被转换成内部的消息发送执行对objc_msgSend方法的调用,掌握好消息发送,可以让我们在编程中更方便灵活。 首先来看下方法定义: 这里有官方文档的解释 我们创建一个MessageSendTe ...
分类:
其他好文 时间:
2017-07-07 16:30:28
阅读次数:
158