-
Notifications
You must be signed in to change notification settings - Fork 110
方法签名对照表
刘全有 edited this page Apr 17, 2020
·
2 revisions
使用dynamic
关键字
TTPatch动态添加的方法分两类
-
仅供JS端调用,此种方法因供JS端调用,所以采用普通方式声明即可.
-
供JS&Oc调用,此种访问因
Native
调用所以需要提供动态方法签名,写法如下方法名 关键字 返回值,参数 方法实现
funcName:
dynamic("void, int", function(){})
如方法只有一个参数/返回值(id类型)可简化:dynamic(function(){}),也可以不写
dynamic
.Native动态方法签名默认: `v@:v'/无参数,无返回值
// OC
@implementation JPTableViewController
- (void)viewDidLoad
{
[self funcWithParams:@"悟空"];
[self funcWithParams:@"熊大" param2:@"熊二"];
[self funcWithParams:@"百度" param2:@"腾讯" param3:@"阿里"];
}
@end
// JS
defineClass("JPTableViewController", {
funcWithParams_:dynamic('void,id',function(param1){
Utils.log_info('[1]动态方法入参:'+param1);
}),
funcWithParams_param2_:dynamic('void,id,id',function(param1,param2){
Utils.log_info('[2]动态方法入参:'+param1+','+param2);
}),
funcWithParams_param2_param3_:dynamic('void,id,id,id',function(param1,param2,param3){
Utils.log_info('[3]动态方法入参:'+param1+','+param2+','+param3);
}),
})
使用block('void,void')
关键字
自动获取block
签名
callBlock_:dynamic(',?',function(callback){
if(callback){
//自动获取签名
callback(10);
})
},
手动设置block
签名
webView_decidePolicyForNavigationAction_decisionHandler_:dynamic(',id,id,?',function(webView, navigationAction,
decisionHandler) {
//手动设置签名
decisionHandler(block(',int'),1);
}),
Obj-C类型 | 符号 |
---|---|
NSString*,NSNumber*,NSObjec*... | id |
Block | ? |
CGFloat | CGFloat |
CGSize | CGSize |
CGRect | CGRect |
CGPoint | CGPoint |
CGVector | CGVector |
Class | Class |
SEL | SEL |
void* | void* |
BOOL | BOOL |
int | int |
void | void |
char | char |
short | short |
unsigned short | unsigned short |
unsigned int | unsigned int |
long | long |
float | float |
size_t | size_t |