精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

iOS消息轉發機制Demo解析

移動開發
假設說我們聲明一個類, 初始化對象, 并且在此類聲明一個方法, 調用方法的時候底層是怎么處理的呢? 今天我們來簡單模擬測試, 來看道理發生了什么?

假設說我們聲明一個類, 初始化對象, 并且在此類聲明一個方法, 調用方法的時候底層是怎么處理的呢? 今天我們來簡單模擬測試, 來看道理發生了什么

以下是調用方法處理的方案圖, 按照方案順序去處理 

以下是系統方法 

  1. //消息轉發 
  2. //- (id)forwardingTargetForSelector:(SEL)aSelector OBJC_AVAILABLE(10.5, 2.0, 9.0, 1.0, 2.0); 
  3. //標準的消息轉發 
  4. //- (void)forwardInvocation:(NSInvocation *)anInvocation OBJC_SWIFT_UNAVAILABLE(""); 
  5. //- (NSMethodSignature *)methodSignatureForSelector:(SEL)aSelector OBJC_SWIFT_UNAVAILABLE(""); 
  6. // 
  7. //動態方法解析 
  8. //+ (BOOL)resolveClassMethod:(SEL)sel OBJC_AVAILABLE(10.5, 2.0, 9.0, 1.0, 2.0); 
  9. //+ (BOOL)resolveInstanceMethod:(SEL)sel OBJC_AVAILABLE(10.5, 2.0, 9.0, 1.0, 2.0); 

Demo解析

基礎步驟

創建類, Person類, 聲明方法, 并且在ViewController進行初始化調用 

  1. VC中 
  2. Person *person = [Person new]; 
  3. [person run]; 
  4. Person類中 
  5. - (void)run;//沒有實現 

此時運行是不是會報錯呢? 就是這個常見的錯誤

“ - [Person run]: unrecognized selector sent to instance 0x600000008310’ “

那么這樣做到底發生了什么? 做了哪些事情? 我們一步步來剖析

動態測試

在Presenter類中, 寫動態方法 

  1. + (BOOL)resolveInstanceMethod:(SEL)sel{ 
  2. NSLog(@"sel = %@",NSStringFromSelector(sel)); 
  3. return [super resolveInstanceMethod:sel]; 

再次運行Demo就會走到這個方法中, 也就是我們所指的方案1, 此時打印出來的scl為” 消息轉發機制Demo[41829:4186268] sel = run “

解析模擬 

  1. + (BOOL)resolveInstanceMethod:(SEL)sel{ 
  2. NSLog(@"sel = %@",NSStringFromSelector(sel)); 
  3. //1.判斷沒有實現方法, 那么我們就是動態添加一個方法 
  4. if (sel == @selector(run:)) { 
  5. class_addMethod(self, sel, (IMP)newRun, "v@:@:"); 
  6. return YES; 
  7. return [super resolveInstanceMethod:sel]; 

聲明函數 

  1. void newRun(id self,SEL sel,NSString *str) { 
  2. NSLog(@"---runok---%@",str); 

溫馨小提示, 動態添加方法參數意譯 : //將要添加方法的類/sel名/IMP函數指針<添加函數>, 官方文檔其實是有解釋的

此時我們再次運行, 那么打印結果就來了” 消息轉發機制Demo[43269:4212899] —runok—ok跑 “, 這樣的話我們就解決掉了報錯這個問題

消息轉發重定向測試

此時我們新創建一個類Mbxb, 此時我們還是重新寫一個同名字的方法run方法, 并且進行實現 

  1. - (void)run{ 
  2. NSLog(@"---Mbxbrunok---"); 

解析

此時有兩個同樣的方法, 我們重新在Person類中

來實現方法 

  1. - (id)forwardingTargetForSelector:(SEL)aSelector{ 
  2. NSLog(@"aSelector = %@",NSStringFromSelector(aSelector)); 
  3. return [super forwardingTargetForSelector:aSelector]; 

此時運行測試, 動態測試輸出” 消息轉發機制Demo[45875:4255869] sel = run “, 消息轉發重定向輸出” 消息轉發機制Demo[45875:4255869] —Mbxbrunok— “, 同樣也可以找見方法run

當我們進行處理 

  1. - (id)forwardingTargetForSelector:(SEL)aSelector{ 
  2. NSLog(@"aSelector = %@",NSStringFromSelector(aSelector)); 
  3. return [[Mbxb alloc]init]; 

那么此時運行成功輸出, “ —Mbxbrunok— “

生成方法簽名轉發消息

此時我們在Person類中, 生成方法簽名 

  1. - (NSMethodSignature *)methodSignatureForSelector:(SEL)aSelector OBJC_SWIFT_UNAVAILABLE(""){ 
  2. //轉化字符 
  3. NSString *sel = NSStringFromSelector(aSelector); 
  4. //判斷, 手動生成簽名 
  5. if([sel isEqualToString:@"run"]){ 
  6. return [NSMethodSignature signatureWithObjCTypes:"v@:"]; 
  7. }else
  8. return [super methodSignatureForSelector:aSelector]; 

拿到簽名 

  1. - (void)forwardInvocation:(NSInvocation *)anInvocation OBJC_SWIFT_UNAVAILABLE(""){ 
  2. NSLog(@"---%@---",anInvocation); 
  3. return [super forwardInvocation:anInvocation]; 

此時我們的po的簽名輸出為” return value: {v} void target: {@} 0x600000016ba0 selector: {:} run “

拿到消息轉發簽名 

  1. - (void)forwardInvocation:(NSInvocation *)anInvocation OBJC_SWIFT_UNAVAILABLE(""){ 
  2. NSLog(@"---%@---",anInvocation); 
  3. //取到消息 
  4. SEL seletor = [anInvocation selector]; 
  5. //轉發 
  6. Mbxb *bxb = [[Mbxb alloc]init]; 
  7. if([bxb respondsToSelector:seletor]){ 
  8. //調用對象,進行轉發 
  9. [anInvocation invokeWithTarget:bxb]; 
  10. }else
  11. return [super forwardInvocation:anInvocation]; 

小細節: 拋出異常

假如說我們沒有這個方法, 同樣是遇到會崩潰的問題

我們這里來進行一個異常處理 

  1. - (void)doesNotRecognizeSelector:(SEL)aSelector{ 
  2. NSString *selStr = NSStringFromSelector(aSelector); 
  3. NSLog(@"%@不存在",selStr); 

我們可以在這個異常處理中一些處理, 比如說彈框

總結

對于消息轉發機制, 我們重新來梳理一下Demo解析思路

還是三個方案, 按順序來走

  1. 動態方法解析
  2. 消息轉發重定向
  3. 生成方法簽名
  4. 拿到簽名轉發消息
  5. 細節處理, 拋出異常
  6. 最后獻上一張邏輯圖 

好了, 給大家這個簡單demo, 當然在代碼中也寫了注釋, 可以去我的git下載, 歡迎star

責任編輯:未麗燕 來源: Oboe_b
相關推薦

2023-10-13 10:44:35

OC消息發送

2024-09-25 08:32:05

2014-03-04 15:28:32

iOS開發消息傳遞機制

2011-05-31 11:55:00

Android 消息機制

2013-04-11 12:40:16

Android消息機制

2016-03-02 09:34:03

runtime消息ios開發

2011-02-21 15:17:45

Qmail

2013-12-16 09:44:01

OpenDayLighSDN網絡轉發

2011-07-01 15:04:49

Qt 內省

2024-10-29 08:34:27

RocketMQ消息類型事務消息

2024-11-11 13:28:11

RocketMQ消息類型FIFO

2011-04-07 17:54:22

Policing

2011-08-02 18:07:03

iPhone 內省 Cocoa

2017-08-17 15:13:52

PostgreSQL MVCC機制

2011-11-23 09:39:33

JavaClassLOader機制

2010-08-13 14:19:44

Flex綁定機制

2024-11-14 09:10:13

消費者RocketMQ負載均衡

2011-04-07 17:27:52

Policing

2011-04-07 17:39:57

Shapping

2011-04-07 17:43:37

Shapping
點贊
收藏

51CTO技術棧公眾號

青青草偷拍视频| 337p粉嫩大胆噜噜噜鲁| 国产欧美一级片| 午夜国产欧美理论在线播放| 亚洲精品一区二区在线观看| 美女av免费在线观看| 国产一区二区三区福利| 精品一区二区三区在线视频| 久久久久久久999| 久久精品国产亚洲av久| 国产亚洲观看| 日韩欧美一区二区三区久久| 精品少妇人妻av一区二区| 空姐吹箫视频大全| 毛片av一区二区| 高清欧美性猛交| 人妻无码一区二区三区免费| aaa国产精品| 欧美日韩中文字幕精品| 国产高清www| 乱人伦中文视频在线| 99re在线精品| 91天堂在线观看| 秋霞av一区二区三区| 综合日韩在线| 尤物99国产成人精品视频| 91丨九色丨尤物| 91精品国产91久久久久久不卡| 日韩av片在线| 国产精品qvod| 91精品在线一区二区| 国产亚洲天堂网| 免费男女羞羞的视频网站在线观看| 国产欧美一区二区在线| 国产日韩三区| 精品国产无码AV| 免费成人在线观看视频| 欧洲精品在线视频| 精品无码久久久久久久| 亚洲乱码电影| 在线视频国产日韩| 一本色道久久综合亚洲精品图片| jizz国产精品| 日韩一级大片在线| 国产欧美激情视频| 在线一区视频观看| 色综合久久久久综合| 日本十八禁视频无遮挡| 手机av在线播放| 亚洲少妇屁股交4| 亚洲精品在线视频观看| 国产视频网站在线| 国产网站一区二区三区| 欧美日韩高清免费| 欧美男男同志| 久久久精品影视| 欧美午夜精品理论片a级大开眼界 欧美午夜精品久久久久免费视 | 久久综合九色九九| 欧美爱爱免费视频| 亚洲经典一区| 欧美猛交免费看| 欧美日韩三级在线观看| 欧美日韩亚洲一区| 国内久久久精品| 国产成人一区二区三区影院在线 | 久久免费看少妇高潮| 免费在线成人av电影| 国产小视频免费在线观看| 久久欧美中文字幕| 天天爽天天狠久久久| 永久av在线| 亚洲欧美日韩人成在线播放| 一本色道久久88亚洲精品综合 | 自拍偷拍欧美精品| 日韩人妻一区二区三区蜜桃视频| 色女人在线视频| 亚洲高清免费观看| 无码精品国产一区二区三区免费| 另类图片综合电影| 欧美日本在线播放| 日本wwww色| 香蕉一区二区| 最近的2019中文字幕免费一页| 老湿机69福利| 亚洲精品麻豆| 国产精品日韩电影| www.色亚洲| 91免费在线视频观看| 午夜精品区一区二区三| h片在线免费| 精品国产老师黑色丝袜高跟鞋| 国模吧无码一区二区三区| 日韩一区二区三区免费视频| 欧美一区二区三区在线视频 | 欧美国产激情一区二区三区蜜月| 国产精品亚洲天堂| 免费成人在线电影| 欧美日韩国产一级片| 国产在线视频三区| 天海翼精品一区二区三区| 亚洲区在线播放| 久久国产精品国语对白| 亚洲女人av| 91网站免费观看| 毛片免费在线播放| 伊人色综合久久天天人手人婷| 国产乱子夫妻xx黑人xyx真爽| 全球中文成人在线| 日韩不卡中文字幕| 国产激情无码一区二区三区| 免费看亚洲片| 国产精品乱码| 日本亚洲精品| 欧美日韩精品国产| 污视频在线观看免费网站| 婷婷成人影院| 欧美黑人又粗大| 亚洲视频久久久| 99麻豆久久久国产精品免费| 在线一区高清| 天堂久久午夜av| 国产视频在线观看一区二区| 九九九免费视频| 美女网站在线免费欧美精品| 久久精品国产精品国产精品污 | 精产国品一二三区| 久久亚洲专区| 国产不卡在线观看| 香蕉av一区二区三区| 亚洲精品久久久蜜桃| 一区二区三区视频网| 欧美欧美黄在线二区| 97国产成人精品视频| www.久久久久久久久久| 亚洲色图另类专区| 日韩av片专区| 欧美韩日一区| 国产精品美乳在线观看| 激情小视频在线观看| 精品国产乱码久久久久酒店| 无码国产精品一区二区免费式直播 | 日韩欧美中文字幕视频| 久88久久88久久久| 亚洲欧洲一区二区福利| av成人在线看| 综合国产在线视频| 中文有码在线播放| 国产欧美va欧美不卡在线 | 久久91精品国产91久久小草| 秋霞在线观看一区二区三区| 蜜臀久久精品| 日韩高清有码在线| 精品国产一区二区三区四| 久久综合久久综合九色| 欧美一级免费播放| 麻豆一区二区麻豆免费观看| 97精品久久久中文字幕免费| 婷婷丁香一区二区三区| 五月婷婷激情综合网| 日韩精品人妻中文字幕有码| 一区二区高清| 美女亚洲精品| 福利精品在线| 久久久精品视频成人| 国产丰满果冻videossex| 一区二区三区日韩在线观看| 亚洲天堂av网站| 国产精品久久久久久模特| 美女黄毛**国产精品啪啪| 国产v综合v| 久久久精品免费视频| 亚洲精品视频专区| 天天综合色天天综合| 亚洲黄色在线网站| 青青国产91久久久久久| 国产日本欧美在线| 豆花视频一区二区| 国产mv免费观看入口亚洲| 91ph在线| 日韩欧美中文字幕一区| 日本一区二区网站| 国产色爱av资源综合区| 天堂av手机在线| 日韩午夜av| 五月天亚洲综合| 香蕉大人久久国产成人av| 欧美亚洲第一页| 国产免费av在线| 91精品国产入口| 日本在线视频免费| 国产精品毛片久久久久久| 中国男女全黄大片| 久久天堂成人| 男女啪啪免费观看| 久久99国内| 91在线精品视频| 日韩性xxx| 欧美超级乱淫片喷水| 日韩a在线看| 91精品国产一区二区三区| 欧美特黄aaaaaa| 亚洲品质自拍视频| 高潮毛片无遮挡| 国产传媒日韩欧美成人| 男人天堂成人在线| 狠狠爱成人网| 在线观看欧美亚洲| 竹菊久久久久久久| 91久久大香伊蕉在人线| a屁视频一区二区三区四区| 久久久中精品2020中文| 日本三级在线视频| 亚洲色图25p| 欧洲成人一区二区三区| 欧美日韩第一区日日骚| 日本天堂网在线| 一区二区三区在线观看网站| 我想看黄色大片| 99国产精品视频免费观看| 九九热视频免费| 免费的成人av| 欧美国产日韩在线播放| 一区二区三区国产盗摄| 大片在线观看网站免费收看| 日韩精品一区二区三区免费观影 | 欧美男男同志| 亚洲国产精品福利| 性做久久久久久久久久| 欧美二区在线观看| 中文字幕在线播放不卡| 色婷婷久久久综合中文字幕| www.av麻豆| 亚洲午夜羞羞片| 久久r这里只有精品| 国产精品久久看| 少妇精品无码一区二区免费视频| jizz一区二区| 99精品一区二区三区无码吞精| 国产一区二区三区免费观看| 欧美第一页浮力影院| 日本中文在线一区| 日本中文字幕高清| 日本在线观看不卡视频| av在线无限看| 日本vs亚洲vs韩国一区三区二区 | 石原莉奈一区二区三区在线观看| 成人短视频在线看| 99久久激情| 在线国产99| 91精品一区国产高清在线gif| 一本一道久久a久久精品综合| 日韩大片在线播放| 亚洲综合第一| 91日韩免费| 9191国产视频| 红桃视频国产精品| 东北少妇不带套对白| 99riav1国产精品视频| 久久av综合网| 国产精品日韩精品欧美精品| 男人透女人免费视频| 日韩成人一区二区三区在线观看| 国产淫片av片久久久久久| 日韩av在线播放中文字幕| 天天综合网日韩| 狠狠久久亚洲欧美| 原创真实夫妻啪啪av| 福利电影一区二区| 久久久久久久无码| 国产视频一区二区在线观看| 成人在线手机视频| 综合中文字幕亚洲| 久草中文在线视频| 欧美视频国产精品| 在线黄色av网站| 日韩三级视频在线看| 手机看片一区二区三区| 亚洲欧美日韩视频一区| 香蕉视频在线免费看| 欧美高跟鞋交xxxxhd| 蜜桃麻豆av在线| 国产日韩欧美在线观看| 亚洲精品不卡在线观看| 久久草.com| 欧美va久久久噜噜噜久久| 特级西西人体www高清大胆| 亚洲理论在线| 邪恶网站在线观看| 国产1区2区3区精品美女| 精品无人区无码乱码毛片国产| 国产精品美女久久久久aⅴ国产馆| 欧美成人免费看| 在线免费精品视频| 欧美 中文字幕| 在线日韩精品视频| av免费不卡| 91精品免费视频| 日韩美女精品| 只有这里有精品| 国产亚洲毛片| 图片区乱熟图片区亚洲| 91首页免费视频| 日本中文在线视频| 一本一本久久a久久精品综合麻豆 一本一道波多野结衣一区二区 | 欧美性xxxx在线播放| 国产精品探花视频| 亚洲美女中文字幕| 怡红院av在线| 国产精品爽黄69天堂a| 你懂的在线观看一区二区| 午夜啪啪免费视频| 天堂蜜桃91精品| 亚洲国产日韩在线一区| 91视频观看视频| 欧美黄色aaa| 欧美视频中文一区二区三区在线观看| 国产91免费在线观看| 久久五月天色综合| 福利一区二区| 日本一区二区不卡高清更新| 夜夜爽av福利精品导航| 老司机av网站| 亚洲女同ⅹxx女同tv| 亚洲av人无码激艳猛片服务器| 亚洲国产精品网站| 少女频道在线观看高清| 国产人妖伪娘一区91| 少妇精品久久久一区二区| 欧美日韩在线一| 成人精品免费网站| 欧美极品aaaaabbbbb| 欧美精品乱人伦久久久久久| 经典三级在线| 日本国产精品视频| 欧美三级自拍| 亚洲人精品午夜射精日韩| 成人午夜碰碰视频| 久久高清无码视频| 日韩一区二区视频在线观看| 国产91在线视频蝌蚪| 成人网页在线免费观看| 91综合网人人| 国产欧美一区二| 中文字幕中文字幕一区| 自拍偷拍精品视频| 中文字幕成人精品久久不卡| 三上悠亚激情av一区二区三区 | 国产欧美一区二| 最近中文字幕一区二区三区| 国产尤物在线观看| 久久亚洲精品一区二区| 精品国产亚洲一区二区在线观看| 综合一区中文字幕| 国产一区二区三区久久久| 日本一二三区在线观看| 日韩欧美在线观看一区二区三区| h片在线免费观看| 99精品国产高清在线观看| 欧美日本一区| 岛国精品一区二区三区| 亚洲国产aⅴ天堂久久| 天天综合在线视频| 日本aⅴ大伊香蕉精品视频| 清纯唯美日韩| 香蕉视频xxx| 亚洲国产精品久久人人爱蜜臀| 色噜噜在线播放| 国产不卡在线观看| 外国成人免费视频| 国产性猛交96| 欧美性高跟鞋xxxxhd| 国产精品免费播放| 成人激情视频小说免费下载| 欧美国产高清| 黄色正能量网站| 欧美日韩的一区二区| 久久av色综合| 色噜噜狠狠一区二区三区| 激情图片小说一区| 日韩大片免费在线观看| 一区二区三区四区精品| 深夜激情久久| 一本久道综合色婷婷五月| 亚洲视频香蕉人妖| 天堂成人在线| 国产欧美最新羞羞视频在线观看| 欧美人成网站| 一级片手机在线观看| 91麻豆精品国产91久久久使用方法 | 亚洲男人的天堂在线aⅴ视频| 亚洲国产精品二区| 日本一本a高清免费不卡| 香蕉久久网站| 少妇特黄一区二区三区| 制服丝袜亚洲色图| 91精品论坛| 中文字幕人妻熟女人妻洋洋| 国产亚洲短视频| 丁香六月色婷婷| 国产精品美女在线|