ios消息轉發(fā)機制

動態(tài)方法解析:

void method(id self, SEL _cmd, NSString *mes){

? ? NSLog(@"實現(xiàn)方法");

}

+ (BOOL)resolveInstanceMethod:(SEL)sel {

? ? if ([NSStringFromSelector(sel) isEqualToString:@"method"]) {

? ? ? ? returnclass_addMethod(self, sel, (IMP)method,"v@:@");

? ? }

? ? return NO;

}

快速轉發(fā):

- (id)forwardingTargetForSelector:(SEL)aSelector {

? ? if ([NSStringFromSelector(aSelector) isEqualToString:@"method"]) {

? ? ? ? //需要轉發(fā)的類

? ? ? ? return[NewClass new];

? ? }

? ? return [super forwardingTargetForSelector:aSelector];

}

慢速轉發(fā):

方法簽名:

- (NSMethodSignature *)methodSignatureForSelector:(SEL)aSelector {

? ? if ([NSStringFromSelector(aSelector) isEqualToString:@"method"]) {

? ? ? ? return [NSMethodSignature signatureWithObjCTypes:"v@:@"];

? ? }

? ? return [super methodSignatureForSelector:aSelector];

}

消息轉發(fā):

- (void)forwardInvocation:(NSInvocation*)anInvocation {

? ? SELsel = [anInvocationselector];

? ? NewClass *newClass = [NewClass new];

? ? if([newClass respondsToSelector:sel]) {

? ? ? ? [anInvocationinvokeWithTarget:newClass];

? ? }

? ? [superforwardInvocation:anInvocation];

}

- (void)doesNotRecognizeSelector:(SEL)aSelector {

? ? //防止找不到方法崩潰

? ? NSLog(@"找不到方法");

}

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

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

  • 1.動態(tài)方法解析 對象在收到無法處理的消息時,會調(diào)用下面的方法,前者是調(diào)用類方法時會調(diào)用,后者是調(diào)用對象方法時會調(diào)...
    蒲公英_閱讀 457評論 0 0
  • 消息轉發(fā)機制 假設說我們聲明一個類, 初始化對象, 并且在此類聲明一個方法, 調(diào)用方法的時候底層是怎么處理的呢? ...
    軟件iOS開發(fā)閱讀 339評論 0 0
  • 在OC中,函數(shù)的執(zhí)行,本質(zhì)是消息發(fā)送。 所有的函數(shù)調(diào)用轉化為C函數(shù)即obj_msgSend(id,sel,para...
    北你妹的風閱讀 249評論 0 0
  • 1、動態(tài)方法解析 對象在收到無法處理的消息時,會調(diào)用下面的方法,前者是調(diào)用類方法時會調(diào)用,后者是調(diào)用對象方法時會調(diào)...
    Colin_狂奔的螞蟻閱讀 475評論 1 3
  • 以前知道蘋果執(zhí)行方法是通過消息執(zhí)行的,當對應的對象或者類無法處理該消息時,蘋果就會啟動消息轉發(fā)機制,通過這一機制,...
    海浪萌物閱讀 531評論 0 0

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