Runtime在Xcode中不能调用带参API的解决方法
objc_msgSend(self.beginRefreshingTaget, self.beginRefreshingAction, self);
Too many arguments to function call, expected 0, have 3
经过几番周折,终于叨叨解决方案了
选中项目 - Project - Build Settings - ENABLE_STRICT_OBJC_MSGSEND 将其设置为 NO 即可
直接上图说明
---------------------------------------------------
Runtime机制和Runtime与Objc的关系讲解:http://blog.jobbole.com/79545/
RunTime 使用methodSignatureForSelector与forwardInvocation实现消息转发
在给程序添加消息转发功能以前,必须覆盖两个方法,即methodSignatureForSelect
forwardInvocation:将选择器转发给一个真正实现了该消息的对象。
- (NSMethodSignature *)methodSignatureForSelect
{
}
- (void)forwardInvocation:(NSInvocation *)invocation
{
}
Objective-C中的方法默认被隐藏了两个参数:self和_cmd。self指向对象本身,_cmd指向方法本身。举两个例子来说明:
这个方法实际上有两个参数:self和_cmd。
这个方法实际上有三个参数:self, _cmd和val。
4)在main.m中有一句代码是
Objective-C Runtime 运行时之一:类与对象
http://blog.jobbole.com/79566/ (metaclass 与类对象的关系metaclasshttp://blog.youkuaiyun.com/kesalin/article/details/7211228)
Objective-C Runtime 运行时之二:成员变量与属性
http://blog.jobbole.com/79570/
Objective-C Runtime 运行时之三:方法与消息
http://blog.jobbole.com/79574/
Objective-C Runtime 运行时之四:Method Swizzling
http://blog.jobbole.com/79580/
Objective-C Runtime 运行时之五:协议与分类
http://blog.jobbole.com/79583/
Objective-C Runtime 运行时之六:拾遗