Runtime

//block -> imp
IMP blockIMP = imp_implementationWithBlock(block);

//object,sel -> imp
IMP imp = [object methodForSelector:sel]

//class,sel -> imp
IMP imp = [class instanceMethodForSelector:sel]

//object,sel -> Method
Method method = class_getInstanceMethod(object, sel);

//NSString -> sel
SEL sel = NSSelectorFromString(@"sharedInstance");

//SEL -> NSString
NSString *str = NSStringFromSelector(sel);

//target,sel -> signature
NSMethodSignature *signature = [target methodSignatureForSelector:sel];

//signature -> invocation
NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:signature];

[invocation setArgument:&arg1 atIndex:2];
[invocation setArgument:&arg2 atIndex:3];
[invocation setArgument:&arg3 atIndex:4];

invocation.target = target
invocation.selector = sel
[invocation invoke];

const char *value;//不同的類型,不同的接收方式
[invocation getReturnValue:&value];
return value;

執(zhí)行一個imp
TartetObject *target = [TartetObject new];
SEL sel = NSSelectorFromString(@"callFun1");
Method m = class_getInstanceMethod([target class], sel);
IMP imp = method_getImplementation(m);
imp(target,sel);

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容