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

runtime那些事兒(消息機制)

移動開發
之前在項目中有遇到過用runtime解決改變全局字體的問題,所以再一次感受到了runtime黑魔法的強大,趁現在有機會分享一下對runtime的一些理解。在對象調用方法是Objective-C中經常使用的功能,也就是消息的傳遞,而Objective-C是C的超集,所以和C不同的是,Objective-C使用的是動態綁定,也就是runtime。Objective-C的消息傳遞和消息機制也就不多說了,今天主要說的是動態方法,也就是函數的調用。

[[163324]]

一、關于runtime

之前在項目中有遇到過用runtime解決改變全局字體的問題,所以再一次感受到了runtime黑魔法的強大,趁現在有機會分享一下對runtime的一些理解。在對象調用方法是Objective-C中經常使用的功能,也就是消息的傳遞,而Objective-C是C的超集,所以和C不同的是,Objective-C使用的是動態綁定,也就是runtime。Objective-C的消息傳遞和消息機制也就不多說了,今天主要說的是動態方法,也就是函數的調用。

二、相關的幾個函數

下面一張圖詳細的概括了每個函數調用的先后以及執行的前提

 

消息傳遞函數的調用

1.對象在收到無法解讀的消息后,首先會調用所屬類的

  1. + (BOOL)resolveInstanceMethod:(SEL)sel 

這個方法在運行時,沒有找到SEL的IML時就會執行。這個函數是給類利用class_addMethod添加函數的機會。根據文檔,如果實現了添加函數代碼則返回YES,未實現返回NO。舉個例子,新建了一個工程,首先我在ViewController這個類中執行doSomething1這個方法,代碼如下

  1. // 
  2. //  ViewController.m 
  3. //  RuntimeTest1 
  4. // 
  5. //  Created by HenryCheng on 15/12/24. 
  6. //  Copyright ?(版權符號) 2015年 www.igancao.com  All rights reserved. 
  7. // 
  8.   
  9. #import "ViewController.h" 
  10.   
  11. @interface ViewController () 
  12.   
  13. @end 
  14.   
  15. @implementation ViewController 
  16.   
  17. - (void)viewDidLoad { 
  18.     [super viewDidLoad]; 
  19.     [self performSelector:@selector(doSomething)]; 
  20.   
  21. - (void)didReceiveMemoryWarning { 
  22.     [super didReceiveMemoryWarning]; 
  23.     // Dispose of any resources that can be recreated. 
  24.   
  25. @end 

運行結果

  1. **2015-12-24 10:35:37.726 RuntimeTest1[1877:337842] -[ViewController doSomething]: unrecognized selector sent to instance 0x7fe9f3736680** 
  2. **2015-12-24 10:35:37.729 RuntimeTest1[1877:337842] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[ViewController doSomething]: unrecognized selector sent to instance 0x7fe9f3736680'** 
  3. ***** First throw call stack:** 

不出意外,程序崩潰,因為沒有找到doSomething這個方法,下面我們在里面實現 + (BOOL)resolveInstanceMethod:(SEL)sel這個方法,并且判斷如果SEL 是doSomething那就輸出add method here

  1. // 
  2. //  ViewController.m 
  3. //  RuntimeTest1 
  4. // 
  5. //  Created by HenryCheng on 15/12/24. 
  6. //  Copyright ?(版權符號) 2015年 www.igancao.com All rights reserved. 
  7. // 
  8.   
  9. #import "ViewController.h" 
  10.   
  11. @interface ViewController () 
  12.   
  13. @end 
  14.   
  15. @implementation ViewController 
  16.   
  17. - (void)viewDidLoad { 
  18.     [super viewDidLoad]; 
  19.     [self performSelector:@selector(doSomething)]; 
  20.   
  21. + (BOOL)resolveInstanceMethod:(SEL)sel { 
  22.     if (sel == @selector(doSomething)) { 
  23.         NSLog(@"add method here"); 
  24.         return YES; 
  25.     } 
  26.     return [super resolveInstanceMethod:sel]; 
  27.   
  28. - (void)didReceiveMemoryWarning { 
  29.     [super didReceiveMemoryWarning]; 
  30.     // Dispose of any resources that can be recreated. 
  31.   
  32. @end 

繼續運行,然后看到log

  1. **2015-12-24 10:47:24.687 RuntimeTest1[2007:382077] add method here** 
  2. **2015-12-24 10:47:24.687 RuntimeTest1[2007:382077] -[ViewController doSomething]: unrecognized selector sent to instance 0x7f9568c331f0** 
  3. **2015-12-24 10:47:24.690 RuntimeTest1[2007:382077] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[ViewController doSomething]: unrecognized selector sent to instance 0x7f9568c331f0'** 
  4. ***** First throw call stack:** 

可以看到程序依然是崩潰了,但是我們可以看到輸出了add method here,這說明我們 + (BOOL)resolveInstanceMethod:(SEL)sel這個方法執行了,并進入了判斷,所以,在這兒,我們可以做一下操作,使這個方法得到相應,不至于走到***- (void)doesNotRecognizeSelector:(SEL)aSelector這個方法中而崩掉了,接下來,我么繼續操作,如下

  1. // 
  2. //  ViewController.m 
  3. //  RuntimeTest1 
  4. // 
  5. //  Created by HenryCheng on 15/12/24. 
  6. //  Copyright ?(版權符號) 2015年 www.igancao.com All rights reserved. 
  7. // 
  8.   
  9. #import "ViewController.h" 
  10.   
  11. #import [objc/runtime.h](因識別問題,此處將尖括號改為方括號) 
  12.   
  13. @interface ViewController () 
  14.   
  15. @end 
  16.   
  17. @implementation ViewController 
  18.   
  19. - (void)viewDidLoad { 
  20.     [super viewDidLoad]; 
  21.     [self performSelector:@selector(doSomething)]; 
  22.   
  23. + (BOOL)resolveInstanceMethod:(SEL)sel { 
  24.     if (sel == @selector(doSomething)) { 
  25.         NSLog(@"add method here"); 
  26.         class_addMethod([self class], sel, (IMP)dynamicMethodIMP, "v@:"); 
  27.         return YES; 
  28.     } 
  29.     return [super resolveInstanceMethod:sel]; 
  30. void dynamicMethodIMP (id self, SEL _cmd) { 
  31.     NSLog(@"doSomething SEL"); 
  32.   
  33. - (void)didReceiveMemoryWarning { 
  34.     [super didReceiveMemoryWarning]; 
  35.     // Dispose of any resources that can be recreated. 
  36.   
  37. @end 

導入了并且在+ (BOOL)resolveInstanceMethod:(SEL)sel中執行了class_addMethod這個方法,然后定義了一個void dynamicMethodIMP (id self, SEL _cmd)這個函數,運行工程,看log

  1. **2015-12-24 11:45:11.934 RuntimeTest1[2284:478571] add method here** 
  2. **2015-12-24 11:45:11.934 RuntimeTest1[2284:478571] doSomething SEL** 

這時候我們發現,程序并沒有崩潰,而且還輸出了doSomething SEL,這時候就說明我們已經通過runtime成功的向我們這個類中添加了一個方法。關于class_addMethod這個方法,是這樣定義的

  • cls   在這個類中添加方法,也就是方法所添加的類

  • name  方法名,這個可以隨便起的

  • imp   實現這個方法的函數

  • types 定義該數返回值類型和參數類型的字符串,這里比如"v@:",其中v就是void,帶表返回類型就是空,@代表參數,這里指的是id(self),這里:指的是方法SEL(_cmd),比如我再定義一個函數

  1. int newMethod (id self, SEL _cmd, NSString *str) { 
  2.   
  3.   return 100

那么添加這個函數的方法就應該是ass_addMethod([self class], @selector(newMethod), (IMP)newMethod, "i@:@");

2.如果在+ (BOOL)resolveInstanceMethod:(SEL)sel中沒有找到或者添加方法

消息繼續往下傳遞到- (id)forwardingTargetForSelector:(SEL)aSelector看看是不是有對象可以執行這個方法,我們來重新建個工程,然后新建一個叫SecondViewController的類,里面有一個- (void)secondVCMethod方法,如下

  1. // 
  2. //  SecondViewController.m 
  3. //  RuntimeTest2 
  4. // 
  5. //  Created by HenryCheng on 15/12/24. 
  6. //  Copyright ?(版權符號) 2015年  www.igancao.com All rights reserved. 
  7. // 
  8.   
  9. #import "SecondViewController.h" 
  10.   
  11. @interface SecondViewController () 
  12.   
  13. @end 
  14.   
  15. @implementation SecondViewController 
  16.   
  17. - (void)viewDidLoad { 
  18.     [super viewDidLoad]; 
  19.     // Do any additional setup after loading the view. 
  20.   
  21. - (void)secondVCMethod { 
  22.     NSLog(@"This is secondVC method !"); 
  23.   
  24. - (void)didReceiveMemoryWarning { 
  25.     [super didReceiveMemoryWarning]; 
  26.     // Dispose of any resources that can be recreated. 
  27.   
  28. /* 
  29. #pragma mark - Navigation 
  30.   
  31. // In a storyboard-based application, you will often want to do a little preparation before navigation 
  32. - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { 
  33.     // Get the new view controller using [segue destinationViewController]. 
  34.     // Pass the selected object to the new view controller. 
  35. } 
  36. */ 
  37.   
  38. @end 

工程結構應該是這樣的

工程目錄圖

現在我想在ViewController中調用- (void)secondVCMethod這個方法,我們知道ViewController和SecondViewController并無繼承關系,按照正常的步驟去做程序肯定會因為在ViewController找不到- (void)secondVCMethod這個方法而直接崩潰的

  1. // 
  2. //  ViewController.m 
  3. //  RuntimeTest2 
  4. // 
  5. //  Created by HenryCheng on 15/12/24. 
  6. //  Copyright ?(版權符號) 2015年 www.igancao.com  All rights reserved. 
  7. // 
  8.   
  9. #import "ViewController.h" 
  10. #import @interface ViewController () 
  11.   
  12. @end 
  13.   
  14. @implementation ViewController 
  15.   
  16. - (void)viewDidLoad { 
  17.     [super viewDidLoad]; 
  18.      [self performSelector:@selector(secondVCMethod)]; 
  19.   
  20. - (void)didReceiveMemoryWarning { 
  21.     [super didReceiveMemoryWarning]; 
  22.     // Dispose of any resources that can be recreated. 
  23.   
  24. @end 

運行結果

  1. **2015-12-24 13:54:44.314 RuntimeTest2[3164:835814] -[ViewController secondVCMethod]: unrecognized selector sent to instance 0x7fc3a8535c10** 
  2. **2015-12-24 13:54:44.317 RuntimeTest2[3164:835814] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[ViewController secondVCMethod]: unrecognized selector sent to instance 0x7fc3a8535c10'** 
  3. ***** First throw call stack:** 

現在我們來處理一下這個消息,如下

  1. // 
  2. //  ViewController.m 
  3. //  RuntimeTest2 
  4. // 
  5. //  Created by HenryCheng on 15/12/24. 
  6. //  Copyright ?(版權符號) 2015年 www.igancao.com All rights reserved. 
  7. // 
  8.   
  9. #import "ViewController.h" 
  10. #import @interface ViewController () 
  11.   
  12. @end 
  13.   
  14. @implementation ViewController 
  15.   
  16. - (void)viewDidLoad { 
  17.     [super viewDidLoad]; 
  18.      [self performSelector:@selector(secondVCMethod)]; 
  19.   
  20. - (id)forwardingTargetForSelector:(SEL)aSelector { 
  21.     Class class = NSClassFromString(@"SecondViewController"); 
  22.     UIViewController *vc = class.new
  23.     if (aSelector == NSSelectorFromString(@"secondVCMethod")) { 
  24.         NSLog(@"secondVC do this !"); 
  25.         return vc; 
  26.     } 
  27.       
  28.     return nil; 
  29.   
  30. + (BOOL)resolveInstanceMethod:(SEL)sel { 
  31.   
  32.     return [super resolveInstanceMethod:sel]; 
  33.   
  34. - (void)didReceiveMemoryWarning { 
  35.     [super didReceiveMemoryWarning]; 
  36.     // Dispose of any resources that can be recreated. 
  37. @end 

運行結果

  1. **2015-12-24 14:00:34.168 RuntimeTest2[3284:870957] secondVC do this !** 
  2. **2015-12-24 14:00:34.169 RuntimeTest2[3284:870957] This is secondVC method !** 

我們會發現- (void)secondVCMethod這個方法執行了,程序也并沒有崩潰,原因就是在這一步

  1. - (id)forwardingTargetForSelector:(SEL)aSelector { 
  2.     Class class = NSClassFromString(@"SecondViewController"); 
  3.     UIViewController *vc = class.new
  4.     if (aSelector == NSSelectorFromString(@"secondVCMethod")) { 
  5.         NSLog(@"secondVC do this !"); 
  6.         return vc; 
  7.     } 
  8.       
  9.     return nil; 

在沒有找到- (void)secondVCMethod這個方法的時候,消息繼續傳遞,直到- (id)forwardingTargetForSelector:(SEL)aSelector,然后我在里面創建了一個SecondViewController的對象,并且判斷如過有這個方法,就返回SecondViewController的對象。這個函數就是消息的轉發,在這兒我們成功的把消息傳給了SecondViewController,然后讓它來執行,所以就執行了那個方法。同時,也相當于完成了一個多繼承!

三、***一點

當然,還有好幾個函數,在上面那張圖里面已經清晰的表達了,有興趣的可以自己試試,看看消息的傳遞順序到底是怎么樣的。上面提到的這些知識runtime的冰山一角,runtime黑魔法的強大遠不止于此,比如方法的調配(Method Swizzling)等,在項目實戰中還是很有用的,后面有時間會再介紹.

參考

責任編輯:倪明 來源: CocoaChina
相關推薦

2022-12-25 10:47:52

2011-02-25 14:35:00

2022-02-08 17:39:04

MySQL服務器存儲

2018-09-26 06:50:19

2021-06-02 08:33:31

TPCTPC-H系統

2013-12-26 14:23:03

定位系統GPS監測

2021-06-09 13:28:40

密碼安全身份認證數據安全

2012-03-12 13:55:22

交互設計

2022-04-08 09:47:55

性能優化開發

2022-05-23 08:34:08

微前端微服務開發

2022-05-13 14:36:12

網絡犯罪網絡攻擊密碼

2017-08-21 17:00:55

2017-05-18 16:30:29

Linux內存管理

2010-09-14 11:36:24

上網行為管理網絡安全網康科技

2022-10-08 00:02:00

CSS工具系統

2022-04-13 10:03:59

性能優化性能分析工具JVM

2021-04-29 10:30:58

MySQL數據遷移

2019-11-20 10:00:56

開源侵權版權

2022-02-18 19:24:15

性能優化代碼

2023-04-11 07:34:40

分布式系統算法
點贊
收藏

51CTO技術棧公眾號

jizz中国女人| 国产精品果冻传媒| av网站在线免费播放| 蜜臀av在线播放一区二区三区| 日韩在线免费视频| 95视频在线观看| 麻豆精品蜜桃| 一区二区三区四区国产精品| 日本不卡一区二区三区在线观看| 国产绿帽刺激高潮对白| 国产精品毛片在线| 久久精品中文字幕免费mv| 亚洲成人av免费在线观看| 久久国内精品| 毛片在线播放a| 亚洲毛片网站| 北条麻妃99精品青青久久| 中文字幕无码人妻少妇免费| 麻豆久久久久| 欧美日韩在线影院| 91传媒免费视频| 加勒比一区二区三区在线| 国产69精品久久久久777| 国产精品999999| 日韩久久久久久久久| 小说区亚洲自拍另类图片专区| 日韩精品免费在线观看| 久久久久中文字幕亚洲精品| 九九热这里有精品| 色综合欧美在线视频区| 自拍日韩亚洲一区在线| 91亚洲天堂| 国产精品视频在线看| 美乳视频一区二区| 欧美一区二区三区成人片在线| 麻豆精品新av中文字幕| 欧洲亚洲妇女av| 久久精品国产亚洲AV无码男同| 国产精品7m凸凹视频分类| 亚洲视频综合网| aaaaa一级片| 国产精东传媒成人av电影| 欧美一卡2卡三卡4卡5免费| 日韩大片一区二区| www.久久.com| 欧美性一二三区| 熟妇人妻va精品中文字幕| 日本蜜桃在线观看视频| 亚洲一区二区免费视频| 狠狠精品干练久久久无码中文字幕| 老司机精品影院| 国产精品人成在线观看免费| 日韩av高清在线播放| 欧美老女人性开放| 久久久三级国产网站| 91精品国产手机| 国产精品99久久久久久人| 日本在线视频免费观看| 伊人成人在线| 97色在线视频| 国产毛片aaa| 午夜在线视频一区二区区别| 日本精品久久久久久久| 中文精品久久久久人妻不卡| 日韩av中文在线观看| 国产精品69av| 一级特黄aaa大片| 国产毛片精品视频| 国产91色在线|亚洲| 开心激情综合网| av在线播放一区二区三区| 精品国产一区二区三区四区精华| 视频二区在线| 国产日韩三级在线| 影音欧美亚洲| 91精品久久| 亚洲成人免费观看| 男人透女人免费视频| 456成人影院在线观看| 欧美美女一区二区| 久久久久无码国产精品一区李宗瑞| 久久精品亚洲成在人线av网址| 日韩成人在线视频网站| 熟女高潮一区二区三区| 天天影视欧美综合在线观看| 久久久久久成人| 亚洲欧美一二三区| 国产一区二区成人久久免费影院 | 中文字幕九色91在线| 国产喷水在线观看| 亚洲二区免费| 国产精品三级美女白浆呻吟| 亚洲av无码片一区二区三区 | 日本视频在线观看一区二区三区| 97国产精品videossex| 任我爽在线视频精品一| 在线免费观看黄| 亚洲国产欧美在线| 中文字幕天天干| 日韩中文字幕一区二区高清99| 日韩电影中文字幕| 欧美性x x x| 久久福利影视| 97操在线视频| 国产小视频免费在线网址| 亚洲乱码精品一二三四区日韩在线| 少妇人妻在线视频| 99精品视频在线免费播放| 日韩久久免费电影| www.超碰在线观看| 久久久精品性| 国产精品免费一区二区三区四区| 第一福利在线| 精品国产91久久久| 在线成人免费av| 成人6969www免费视频| 精品精品国产国产自在线| 中文字幕视频网| 国产成人欧美日韩在线电影| 亚洲精品二区| 亚洲少妇视频| 精品国产伦一区二区三区观看体验| 精品人妻中文无码av在线 | 97精品国产aⅴ7777| 96日本xxxxxⅹxxx17| www一区二区| 青青草成人免费在线视频| 久久久久久久久成人| 最近2019中文字幕一页二页| 国产午夜麻豆影院在线观看| a级精品国产片在线观看| 国产黄色激情视频| 国产成人久久精品一区二区三区| 国产亚洲一区精品| 中文字幕国产在线观看| 成人av资源在线| 菠萝蜜视频在线观看入口| 亚洲青青一区| 日韩在线观看免费| 中文字幕在线一| 中文字幕不卡三区| 亚洲视频在线a| 国产一区二区三区探花| 57pao成人永久免费视频| 日本韩国在线观看| 亚洲国产欧美日韩另类综合 | 欧美国产日韩一区二区在线观看 | 亚洲福利精品在线| 中文字幕一区二区三区手机版| 国产九九视频一区二区三区| 国产免费xxx| 欧美二区观看| 欧美高清不卡在线| 韩国av免费在线| 亚洲va韩国va欧美va| 污污污www精品国产网站| 1024日韩| 欧美成人免费在线| 日本.亚洲电影| 日韩在线资源网| 国产孕妇孕交大片孕| 亚洲欧美国产毛片在线| gogo亚洲国模私拍人体| 伊人蜜桃色噜噜激情综合| 精品欧美日韩在线| 欧美大电影免费观看| 这里只有视频精品| 国产精品久久影视| 亚洲国产日韩a在线播放性色| 岛国精品资源网站| 久久综合导航| 激情五月五月婷婷| 国产美女撒尿一区二区| 91成人福利在线| 92国产在线视频| 日韩无一区二区| 伊人久久综合视频| 国产性天天综合网| 亚洲欧美日韩网站| 亚洲国产免费| 日韩三级电影网站| 免费欧美网站| 欧美一区第一页| 在线观看麻豆蜜桃| 精品国产伦一区二区三区免费| www.国产com| 1024亚洲合集| 久久久午夜精品福利内容| 日韩精品一区第一页| 今天免费高清在线观看国语| 色天下一区二区三区| 国产精品久久综合av爱欲tv| caopo在线| 亚洲精品自拍视频| 国产又粗又长视频| 欧美日韩亚洲高清| 国产美女久久久久久| 久久这里只有精品首页| 污网站在线免费| 亚洲专区一区| 黄色免费高清视频| 九九久久成人| 国产日韩精品推荐| 日日夜夜亚洲| 日本精品久久久久影院| 中文字幕在线观看播放| 亚洲色图18p| 人妻妺妺窝人体色www聚色窝| 在线中文字幕一区二区| 国产在线观看免费视频今夜| 国产精品欧美久久久久无广告| 欧亚乱熟女一区二区在线| 精品在线观看视频| 超碰网在线观看| 尹人成人综合网| 最新视频 - x88av| 欧美在线观看视频一区| 精品一区2区三区| 97久久精品| 成人性生交大片免费看视频直播| 美女100%一区| 38少妇精品导航| 精精国产xxxx视频在线中文版| 久久精品99国产精品酒店日本| 国产最新视频在线观看| 亚洲国产精品久久久| 成人av手机在线| 欧美一区二区三区在线观看视频| 亚洲男人天堂网址| 色www精品视频在线观看| 欧美一区二区三区四| 午夜精品久久久久久| 麻豆一区二区三区精品视频| 亚洲精品国产精品乱码不99| 国产精品国产三级国产传播| 国产精品网站一区| 五月天精品在线| 日本一区二区三区四区| 欧美日韩高清丝袜| 国产亚洲污的网站| 人妻丰满熟妇aⅴ无码| 成人黄色综合网站| 无码人妻丰满熟妇区毛片蜜桃精品| 激情图区综合网| 中日韩av在线播放| 久久精品国产一区二区| 依人在线免费视频| 精品午夜久久福利影院| www.99r| 黄色小说综合网站| 先锋资源在线视频| 国产成人综合亚洲网站| 中国男女全黄大片| 成人激情文学综合网| 污片免费在线观看| 久久女同性恋中文字幕| av黄色在线免费观看| 国产婷婷精品av在线| 永久免费毛片在线观看| 中文字幕在线不卡国产视频| 日本精品在线免费观看| 亚洲卡通欧美制服中文| 精品午夜福利视频| 精品人伦一区二区三区蜜桃网站| 国产一区二区三区影院| 一本色道久久综合亚洲aⅴ蜜桃| 亚洲欧美日韩激情| 欧美日韩亚洲综合一区| 国产精品嫩草影院桃色| 亚洲精品一区在线观看| 亚洲AV成人无码一二三区在线| 亚洲精品中文字幕有码专区| 成人av一区| 欧美成人黑人xx视频免费观看| 亚洲综合影视| 奇门遁甲1982国语版免费观看高清| 免费高清视频在线一区| 亚洲a在线观看| 青青久久av| 亚洲精品视频一区二区三区| 欧美精品aa| 亚洲乱码中文字幕久久孕妇黑人| 秋霞午夜av一区二区三区| 在线免费黄色小视频| 不卡视频一二三| 99re6热在线精品视频| 亚洲黄网站在线观看| 黄色片网站在线免费观看| 在线观看91精品国产麻豆| 日韩中文字幕观看| 最近2019中文免费高清视频观看www99 | 9999久久久久| 日本一区二区在线| 在线不卡亚洲| 九一精品久久久| 99这里只有久久精品视频| 欧美性生交大片| 欧美日韩中文字幕在线视频| 国产精品无码在线播放| 亚洲美女性视频| 在线三级中文| 国产精品视频内| 欧美黑白配在线| 男女啪啪免费观看| 奇米影视7777精品一区二区| 中文字幕在线播放一区| 1024亚洲合集| 这里只有精品999| 亚洲精品v天堂中文字幕| 国产传媒在线播放| 国产精品久久久久av免费| 黑色丝袜福利片av久久| 公共露出暴露狂另类av| 日本亚洲三级在线| 97伦伦午夜电影理伦片| 午夜影院在线观看欧美| 99riav国产| 精品国偷自产在线视频99| 日韩一区二区三区免费| 久久本道综合色狠狠五月| 欧美日韩亚洲一区在线观看| 国产精品v日韩精品v在线观看| 久久在线免费观看| 日本学生初尝黑人巨免费视频| 91精品国产91久久综合桃花| 99视频在线观看地址| 日韩美女中文字幕| 婷婷五月色综合香五月| 69sex久久精品国产麻豆| 国产老肥熟一区二区三区| 亚洲伦理一区二区三区| 色呦呦网站一区| 五月婷婷六月丁香综合| 午夜精品久久久久久久99黑人| 日韩电影精品| 免费在线一区二区| 国产精品人人爽人人做我的可爱 | 国产午夜亚洲精品午夜鲁丝片| youjizz在线视频| 日韩电影中文字幕一区| 免费h在线看| 久久99精品久久久久久秒播放器 | 精品黑人一区二区三区观看时间| 亚洲成人动漫精品| 国模私拍视频在线| 91精品国产自产91精品| 日韩欧美中文字幕电影| a级黄色一级片| 91免费视频网| 成人h动漫精品一区二区下载| 亚洲欧美资源在线| 91成人在线| 亚洲综合首页| 国产一区二区三区在线看麻豆| 久久人妻无码aⅴ毛片a片app | 国产在线自天天| 国产精品久久久久久亚洲调教| 成人一二三区| 久久人人爽人人片| 亚洲第一福利视频在线| 天天综合永久入口| 日本午夜在线亚洲.国产| 青青草国产成人a∨下载安卓| 污版视频在线观看| 亚洲欧美精品午睡沙发| www.日韩高清| 欧美又大又粗又长| 日韩av二区| 可以看的av网址| 亚洲成人av福利| 成人精品一区二区三区校园激情| 国产精品久久久久久久av大片| 97视频热人人精品免费| 色哟哟在线观看视频| 精品久久久久久久久中文字幕| 国产在线视频网址| 91最新在线免费观看| 国内揄拍国内精品久久| 少妇大叫太粗太大爽一区二区| 欧美视频在线一区| 欧洲性视频在线播放| 欧美国产视频在线观看| 精品一区二区精品| 日韩精品一区二区在线播放 | 国产亚洲小视频| 亚洲女人被黑人巨大进入al| www.久久99| 日韩a在线播放| 亚洲天天做日日做天天谢日日欢| 熟妇人妻中文av无码| 91精品久久久久久综合乱菊 | 8050国产精品久久久久久| 色爱综合网欧美| 日韩Av无码精品| 欧美挠脚心视频网站| 午夜激情电影在线播放| 日本丰满少妇黄大片在线观看| 久久久久久久综合日本| 亚洲精品97久久中文字幕| 欧美成人有码|