C语言使用“静态绑定”,也就是说,在编译期就能决定运行时所应调用的函数(也就是说函数地址硬编码在指令之中)。如果是内联函数,就无法硬编码在指令之中,而是要在运行期读取出来(也就是动态绑定)。在底层,所有方法都是普通的C函数。OC对象的每个方法都可以视为简单的C函数。 Class_selector(i...
分类:
其他好文 时间:
2014-11-27 20:25:27
阅读次数:
226
错误代码:objc_msgSend(self.beginRefreshingTaget, self.beginRefreshingAction, self);Too many arguments to function call, expected 0, have 3经过几番周折,终于叨叨解决方案了...
分类:
移动开发 时间:
2014-11-18 11:42:09
阅读次数:
317
不需要重新创建Project,手动修改工程设置。
第一步:在Project文件中,修改type,去掉static
第二步:还需要修改工程设置:
CLANG_WARN_UNREACHABLE_CODE = YES;
CURRENT_PROJECT_VERSION = 1;
ENABLE_STRICT_OBJC_MSGSEND = YES;
VERS...
分类:
移动开发 时间:
2014-11-11 00:54:36
阅读次数:
181
之前一直在非64位机器下测试一切正常的程序,在iPhone5s下无缘无故崩溃。崩溃的位置是调用objc_msgSend时出现。经过一番辛苦搜索终于发现苹果官网上有一段这样的描述: Dispatch Objective-C Messages Using the ...
分类:
其他好文 时间:
2014-11-05 17:42:54
阅读次数:
209
在Objective-C中,message与方法的真正实现是在执行阶段绑定的,而非编译阶段。编译器会将消息发送转换成对objc_msgSend方法的调用。 objc_msgSend方法含两个必要参数:receiver、方法名(即:selector),如: [receiver message];将被....
分类:
移动开发 时间:
2014-10-22 17:21:27
阅读次数:
167
Method Swizzling: 即方法交换。先来学点Objective-C的运行时来热热身。一、在Objective-C中,message与方法的真正实现是在执行阶段绑定的,而非编译阶段。编译器会将消息发送转换成对objc_msgSend方法的调用。 objc_msgSend方法含两个必要参数....
分类:
其他好文 时间:
2014-10-08 15:12:25
阅读次数:
230
在Objective-C中,message与方法的真正实现是在执行阶段绑定的,而非编译阶段。编译器会将消息发送转换成对objc_msgSend方法的调用。objc_msgSend方法含两个必要参数:receiver、方法名(即:selector),如:[receiver message];将被转换为...
分类:
其他好文 时间:
2014-08-27 10:37:57
阅读次数:
205
第11条:理解objc_msgSend的作用
在对象上调用方法是Objective-C中经常使用的功能。用Objective-C术语来说这叫做:“传递消息”(pass a message)。消息有“名称”(name)或者“选择子”(selector),可以接收参数,而且可能还有返回值。
由于Objective-C是C的超集,所以最好理解C语言的函数调用方式。C语言使用“静态绑定...
分类:
其他好文 时间:
2014-08-10 15:45:20
阅读次数:
360