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

iOS開發中runtime常用的幾種方法

移動開發
公司項目中用了一些 runtime 相關的知識, 初看時有些蒙, 雖然用的并不多, 但還是想著系統的把 runtime 相關的常用方法整理一下, 自己以后用著方便, 也希望對看到的朋友有所幫助。

公司項目中用了一些 runtime 相關的知識, 初看時有些蒙, 雖然用的并不多, 但還是想著系統的把 runtime 相關的常用方法整理一下, 自己以后用著方便, 也希望對看到的朋友有所幫助。

iOS開發中runtime常用的幾種方法

一、runtime 簡介

runtime 簡稱運行時,是系統在運行的時候的一些機制,其中最主要的是消息機制。它是一套比較底層的純 C 語言 API, 屬于一個 C 語言庫,包含了很多底層的 C 語言 API。我們平時編寫的 OC 代碼,在程序運行過程時,其實最終都是轉成了 runtime 的 C 語言代碼。如下所示:

  1. // OC代碼: 
  2. [Person coding]; 
  3.  
  4. //運行時 runtime 會將它轉化成 C 語言的代碼: 
  5. objc_msgSend(Person, @selector(coding)); 

二、相關函數

  1. // 遍歷某個類所有的成員變量 
  2. class_copyIvarList 
  3.  
  4. // 遍歷某個類所有的方法 
  5. class_copyMethodList 
  6.  
  7. // 獲取指定名稱的成員變量 
  8. class_getInstanceVariable 
  9.  
  10. // 獲取成員變量名 
  11. ivar_getName 
  12.  
  13. // 獲取成員變量類型編碼 
  14. ivar_getTypeEncoding 
  15.  
  16. // 獲取某個對象成員變量的值 
  17. object_getIvar 
  18.  
  19. // 設置某個對象成員變量的值 
  20. object_setIvar 
  21.  
  22. // 給對象發送消息 
  23. objc_msgSend 

三、相關應用

  • 更改屬性值
  • 動態添加屬性
  • 動態添加方法
  • 交換方法的實現
  • 攔截并替換方法
  • 在方法上增加額外功能
  • 歸檔解檔
  • 字典轉模型

以上八種用法用代碼都實現了, 文末會貼出代碼地址.

 


runtime

四、代碼實現

要使用runtime,要先引入頭文件#import

4.1 更改屬性值

用 runtime 修改一個對象的屬性值

  1. unsigned int count = 0; 
  2.   // 動態獲取類中的所有屬性(包括私有) 
  3.   Ivar *ivar = class_copyIvarList(_person.class, &count); 
  4.   // 遍歷屬性找到對應字段 
  5.   for (int i = 0; i < count; i ++) { 
  6.       Ivar tempIvar = ivar[i]; 
  7.       const char *varChar = ivar_getName(tempIvar); 
  8.       NSString *varString = [NSString stringWithUTF8String:varChar]; 
  9.       if ([varString isEqualToString:@"_name"]) { 
  10.           // 修改對應的字段值 
  11.           object_setIvar(_person, tempIvar, @"更改屬性值成功"); 
  12.           break; 
  13.       } 
  14.   } 

4.2 動態添加屬性

用 runtime 為一個類添加屬性, iOS 分類里一般會這樣用, 我們建立一個分類, NSObject+NNAddAttribute.h, 并添加以下代碼:

  1. - (void)setName:(NSString *)name { 
  2.     objc_setAssociatedObject(self, @"name"name, OBJC_ASSOCIATION_RETAIN_NONATOMIC); 
  3.  
  4. - (NSString *)name { 
  5.     return objc_getAssociatedObject(self, @"name"); 

這樣只要引用 NSObject+NNAddAttribute.h, 用 NSObject 創建的對象就會有一個 name 屬性, 我們可以直接這樣寫:

  1. NSObject *person = [NSObject new]; 
  2.   person.name = @"以夢為馬"

4.3 動態添加方法

person 類中沒有 coding 方法,我們用 runtime 給 person 類添加了一個名字叫 coding 的方法,最終再調用coding方法做出相應. 下面代碼的幾個參數需要注意一下:

  1. - (void)buttonClick:(UIButton *)sender { 
  2.     /* 
  3.      動態添加 coding 方法 
  4.      (IMP)codingOC 意思是 codingOC 的地址指針; 
  5.      "v@:" 意思是,v 代表無返回值 void,如果是 i 則代表 int;@代表 id sel; : 代表 SEL _cmd; 
  6.      “v@:@@” 意思是,兩個參數的沒有返回值。 
  7.      */ 
  8.     class_addMethod([_person class], @selector(coding), (IMP)codingOC, "v@:"); 
  9.     // 調用 coding 方法響應事件 
  10.     if ([_person respondsToSelector:@selector(coding)]) { 
  11.         [_person performSelector:@selector(coding)]; 
  12.         self.testLabelText = @"添加方法成功"
  13.     } else { 
  14.         self.testLabelText = @"添加方法失敗"
  15.     } 
  16.  
  17. // 編寫 codingOC 的實現 
  18. void codingOC(id self,SEL _cmd) { 
  19.     NSLog(@"添加方法成功"); 

4.4 交換方法的實現

某個類有兩個方法, 比如 person 類有兩個方法, coding 方法與 eating 方法, 我們用 runtime 交換一下這兩個方法, 就會出現這樣的情況, 當我們調用 coding 的時候, 執行的是 eating, 當我們調用 eating 的時候, 執行的是 coding, 如下面的動態效果圖.

  1. Method oriMethod = class_getInstanceMethod(_person.class, @selector(coding)); 
  2. Method curMethod = class_getInstanceMethod(_person.class, @selector(eating)); 
  3. method_exchangeImplementations(oriMethod, curMethod); 

 


交換方法的實現

4.5 攔截并替換方法

這個功能和上面的其實有些類似, 攔截并替換方法可以攔截并替換同一個類的, 也可以在兩個類之間進行, 我這里用了兩個不同的類, 下面是簡單的代碼實現.

  1. _person = [NNPerson new]; 
  2.   _library = [NNLibrary new]; 
  3.   self.testLabelText = [_library libraryMethod]; 
  4.   Method oriMethod = class_getInstanceMethod(_person.class, @selector(changeMethod)); 
  5.   Method curMethod = class_getInstanceMethod(_library.class, @selector(libraryMethod)); 
  6.   method_exchangeImplementations(oriMethod, curMethod); 

4.6 在方法上增加額外功能

這個使用場景還是挺多的, 比如我們需要記錄 APP 中某一個按鈕的點擊次數, 這個時候我們便可以利用 runtime 來實現這個功能. 我這里寫了個 UIButton 的子類, 然后在 + (void)load 中用 runtime 給它增加了一個功能, 核心代碼及實現效果圖如下:

  1. + (void)load { 
  2.     static dispatch_once_t onceToken; 
  3.     dispatch_once(&onceToken, ^{ 
  4.         Method oriMethod = class_getInstanceMethod(self.class, @selector(sendAction:to:forEvent:)); 
  5.         Method cusMethod = class_getInstanceMethod(self.class, @selector(customSendAction:to:forEvent:)); 
  6.         // 判斷自定義的方法是否實現, 避免崩潰 
  7.         BOOL addSuccess = class_addMethod(self.class, @selector(sendAction:to:forEvent:), method_getImplementation(cusMethod), method_getTypeEncoding(cusMethod)); 
  8.         if (addSuccess) { 
  9.             // 沒有實現, 將源方法的實現替換到交換方法的實現 
  10.             class_replaceMethod(self.class, @selector(customSendAction:to:forEvent:), method_getImplementation(oriMethod), method_getTypeEncoding(oriMethod)); 
  11.         } else { 
  12.             // 已經實現, 直接交換方法 
  13.             method_exchangeImplementations(oriMethod, cusMethod); 
  14.         } 
  15.     }); 

 


在方法上增加額外功能

4.7 歸檔解檔

當我們使用 NSCoding 進行歸檔及解檔時, 如果不用 runtime, 那么不管模型里面有多少屬性, 我們都需要對其實現一遍 encodeObject 和 decodeObjectForKey 方法, 如果模型里面有 10000 個屬性, 那么我們就需要寫 10000 句encodeObject 和 decodeObjectForKey 方法, 這個時候用 runtime, 便可以充分體驗其好處(以下只是核心代碼, 具體代碼請見 demo).

  1. - (void)encodeWithCoder:(NSCoder *)aCoder { 
  2.     unsigned int count = 0; 
  3.     // 獲取類中所有屬性 
  4.     Ivar *ivars = class_copyIvarList(self.class, &count); 
  5.     // 遍歷屬性 
  6.     for (int i = 0; i < count; i ++) { 
  7.         // 取出 i 位置對應的屬性 
  8.         Ivar ivar = ivars[i]; 
  9.         // 查看屬性 
  10.         const char *name = ivar_getName(ivar); 
  11.         NSString *key = [NSString stringWithUTF8String:name]; 
  12.         // 利用 KVC 進行取值,根據屬性名稱獲取對應的值 
  13.         id value = [self valueForKey:key]; 
  14.         [aCoder encodeObject:value forKey:key]; 
  15.     } 
  16.     free(ivars); 
  17.  
  18. - (instancetype)initWithCoder:(NSCoder *)aDecoder { 
  19.     if (self = [super init]) { 
  20.         unsigned int count = 0; 
  21.         // 獲取類中所有屬性 
  22.         Ivar *ivars = class_copyIvarList(self.class, &count); 
  23.         // 遍歷屬性 
  24.         for (int i = 0; i < count; i ++) { 
  25.             // 取出 i 位置對應的屬性 
  26.             Ivar ivar = ivars[i]; 
  27.             // 查看屬性 
  28.             const char *name = ivar_getName(ivar); 
  29.             NSString *key = [NSString stringWithUTF8String:name]; 
  30.             // 進行解檔取值 
  31.             id value = [aDecoder decodeObjectForKey:key]; 
  32.             // 利用 KVC 對屬性賦值 
  33.             [self setValue:value forKey:key]; 
  34.         } 
  35.     } 
  36.     return self; 

4.8 字典轉模型

字典轉模型我們通常用的都是第三方, MJExtension, YYModel 等, 但也有必要了解一下其實現方式: 遍歷模型中的所有屬性,根據模型的屬性名,去字典中查找對應的 key,取出對應的值,給模型的屬性賦值。

  1. /** 字典轉模型 **/ 
  2. + (instancetype)modelWithDict:(NSDictionary *)dict { 
  3.     id objc = [[self alloc] init]; 
  4.     unsigned int count = 0; 
  5.     // 獲取成員屬性數組 
  6.     Ivar *ivarList = class_copyIvarList(self, &count); 
  7.     // 遍歷所有的成員屬性名 
  8.     for (int i = 0; i < count; i ++) { 
  9.         // 獲取成員屬性 
  10.         Ivar ivar = ivarList[i]; 
  11.         // 獲取成員屬性名 
  12.         NSString *ivarName = [NSString stringWithUTF8String:ivar_getName(ivar)]; 
  13.         NSString *key = [ivarName substringFromIndex:1]; 
  14.         // 從字典中取出對應 value 給模型屬性賦值 
  15.         id value = dict[key]; 
  16.         // 獲取成員屬性類型 
  17.         NSString *ivarType = [NSString stringWithUTF8String:ivar_getTypeEncoding(ivar)]; 
  18.         // 判斷 value 是不是字典 
  19.         if ([value isKindOfClass:[NSDictionary class]]) { 
  20.             ivarType = [ivarType stringByReplacingOccurrencesOfString:@"@" withString:@""]; 
  21.             ivarType = [ivarType stringByReplacingOccurrencesOfString:@""" withString:@""]; 
  22.             Class modalClass = NSClassFromString(ivarType); 
  23.             // 字典轉模型 
  24.             if (modalClass) { 
  25.                 // 字典轉模型 
  26.                 value = [modalClass modelWithDict:value]; 
  27.             } 
  28.         } 
  29.         if ([value isKindOfClass:[NSArray class]]) { 
  30.             // 判斷對應類有沒有實現字典數組轉模型數組的協議 
  31.             if ([self respondsToSelector:@selector(arrayContainModelClass)]) { 
  32.                 // 轉換成id類型,就能調用任何對象的方法 
  33.                 id idSelf = self; 
  34.                 // 獲取數組中字典對應的模型 
  35.                 NSString *type = [idSelf arrayContainModelClass][key]; 
  36.                 // 生成模型 
  37.                 Class classModel = NSClassFromString(type); 
  38.                 NSMutableArray *arrM = [NSMutableArray array]; 
  39.                 // 遍歷字典數組,生成模型數組 
  40.                 for (NSDictionary *dict in value) { 
  41.                     // 字典轉模型 
  42.                     id model =  [classModel modelWithDict:dict]; 
  43.                     [arrM addObject:model]; 
  44.                 } 
  45.                 // 把模型數組賦值給value 
  46.                 value = arrM; 
  47.             } 
  48.         } 
  49.         // KVC 字典轉模型 
  50.         if (value) { 
  51.             [objc setValue:value forKey:key]; 
  52.         } 
  53.     } 
  54.     return objc; 

上面的所有代碼都可以在這里下載: runtime 練習: NNRuntimeTest

https://github.com/liuzhongning/NNLearn/tree/master/002.%20NNRuntimeTest

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

2010-05-17 15:17:06

MySQL常用操作

2024-06-03 08:26:34

Android開發監聽器

2021-03-08 09:32:04

Python文件命令

2009-08-25 09:22:01

DataGridVie

2020-10-16 18:35:53

JavaScript字符串正則表達式

2009-09-18 12:29:55

2013-08-21 11:31:21

iPhone圖片方法

2010-06-03 08:55:43

LINQ

2021-06-08 11:42:12

Pandas數據分析Python

2010-04-30 16:22:07

Unix終端

2010-01-22 14:46:25

C++語言

2010-10-26 09:23:03

Web Service

2011-06-16 10:48:33

session

2020-08-24 08:05:47

JavaScriptJavaScript 頁面

2021-02-26 13:20:48

Shell空行Linux

2009-08-31 09:19:31

c#隱藏窗口

2009-09-09 11:24:46

PHP實現MVC

2020-01-10 16:23:44

Springboot停止服務Java

2024-02-21 08:33:27

GoReadDir性能

2009-06-11 13:49:30

點贊
收藏

51CTO技術棧公眾號

日韩一级毛片| 手机在线理论片| 国产1区2区3区精品美女| 久久久久久久久综合| av网站有哪些| av在线播放一区二区| 亚洲不卡一区二区三区| 日本一区视频在线观看| 国产黄a三级三级看三级| 亚洲深爱激情| 久久国产精品偷| 国产男男chinese网站| 日韩毛片免费看| 精品国产1区2区| 久久精品国产精品亚洲精品色| 噜噜噜久久,亚洲精品国产品| 日韩精品免费专区| 欧美国产日韩视频| 亚洲激情图片网| 欧美a大片欧美片| 欧美一级日韩一级| 韩国视频一区二区三区| bbw在线视频| 国产精品福利在线播放| 久久精品人成| 三级网站在线看| 国产在线视频一区二区| 国产精品18久久久久久麻辣| 精品无码久久久久| 香蕉精品视频在线观看| 伊人久久精品视频| 欧产日产国产精品98| 精品中文在线| 欧美精品乱人伦久久久久久| 男人的天堂日韩| 欧美久久天堂| 午夜精品福利一区二区三区蜜桃| 992tv成人免费观看| 成人p站proumb入口| 久久综合色8888| 韩国成人一区| 四虎永久在线观看| 国产成a人无v码亚洲福利| 成人免费激情视频| 91成人在线免费| 蜜臀av国产精品久久久久| 亚洲免费观看高清完整版在线 | 最近中文字幕在线观看视频| 国产午夜精品一区二区三区欧美| 久久免费视频在线观看| 久久午夜无码鲁丝片| 女同性一区二区三区人了人一 | 亚洲国产成人91精品| 性一交一黄一片| 日本久久伊人| 日韩精品最新网址| 麻豆网站免费观看| 亚洲一区电影| 亚洲国产精品成人精品| 日本一级片在线播放| 欧美影院天天5g天天爽| 精品中文字幕久久久久久| 久久丫精品国产亚洲av不卡| 日韩电影在线观看完整免费观看| 日韩精品高清在线| 国产又爽又黄无码无遮挡在线观看| 欧美日韩导航| 亚洲桃花岛网站| 99成人在线观看| 欧美粗暴jizz性欧美20| 久久久久久综合网天天| 在线观看 中文字幕| 亚洲影视综合| 国产精品一久久香蕉国产线看观看| 在线观看免费黄色小视频| 国产麻豆91精品| 精品亚洲欧美日韩| 中文日本在线观看| 一区二区三区在线视频免费| av无码久久久久久不卡网站| 亚洲国产成人二区| 欧美猛男gaygay网站| 麻豆tv在线观看| 亚洲另类春色校园小说| 自拍偷拍亚洲在线| 久久久久无码国产精品不卡| 亚洲欧美久久久| 成人国产精品日本在线| 免费观看国产精品| 国产欧美日韩三级| 中文字幕日韩精品无码内射| 亚洲性受xxx喷奶水| 欧美日本一区二区三区| 中文字幕在线国产| 九九视频免费观看视频精品 | 182在线视频观看| 在线看日韩精品电影| 久久久久中文字幕亚洲精品| 亚洲精品国产动漫| 欧美成年人视频| 日韩在线播放中文字幕| 国产高清在线精品| 欧美一区二区三区四区五区六区| 先锋成人av| 91国偷自产一区二区开放时间 | 亚洲精品欧美综合四区| 男人天堂网视频| 狂野欧美xxxx韩国少妇| 亚洲片av在线| 精品无码m3u8在线观看| 久久99精品国产91久久来源| 久久综合一区二区三区| a视频在线观看免费| 欧日韩精品视频| a级一a一级在线观看| 91精品一区二区三区综合在线爱| 日韩美女av在线免费观看| 成人黄色免费视频| 国产精品久久久久久亚洲毛片 | 制服诱惑一区| 极品美女一区| 亚洲精品国产精品自产a区红杏吧| 欧美视频一区二区在线| 老司机久久99久久精品播放免费 | 欧美人与牛zoz0性行为| 欧美激情综合亚洲一二区| 91成人一区二区三区| 久久精品视频一区| 国产高清精品在线观看| 91国内精品白嫩初高生| 美女视频久久黄| 中文字幕日韩经典| 国产午夜亚洲精品羞羞网站| 波多野结衣乳巨码无在线| 91嫩草精品| 久久综合五月天| 国产精品免费无遮挡| 中文字幕的久久| 手机在线免费观看毛片| jiujiure精品视频播放| 日韩免费观看在线观看| 韩国中文免费在线视频| 91久久免费观看| 日本乱子伦xxxx| 日韩成人一区二区| 日本在线播放一区| 91超碰碰碰碰久久久久久综合| 亚洲天堂一区二区三区| 中文字幕免费视频观看| 国产目拍亚洲精品99久久精品| 久久婷婷国产91天堂综合精品| 国产精品一国产精品| 国产激情视频一区| 永久免费在线观看视频| 4438x亚洲最大成人网| 精品国产视频一区二区三区| 国产精品99久久久久久有的能看 | 久久99热这里只有精品| 亚洲视频精品一区| 99热这里有精品| 久久99亚洲精品| 男人天堂手机在线观看| 福利二区91精品bt7086| 国产熟女一区二区| 毛片av一区二区三区| 玖玖精品在线视频| 99香蕉久久| 欧美亚洲第一页| 91在线网址| 91精品国产色综合久久不卡电影| 欧美又粗又大又长| 99精品一区二区| 久久久精品麻豆| 在线成人直播| 国产在线精品一区| 国产精品久久久久av电视剧| 色老头一区二区三区在线观看| 国产乱人乱偷精品视频a人人澡| 一区二区三区美女| 黄色国产在线观看| 另类综合日韩欧美亚洲| 久久这里只有精品8| 四虎884aa成人精品最新| 国产精品久久久久久亚洲影视| a免费在线观看| 精品一区二区电影| 亚洲无码久久久久久久| 亚洲一区自拍偷拍| 亚洲自拍偷拍图| 福利一区在线观看| 在线观看的毛片| 亚洲一级电影| 无遮挡亚洲一区| 国产精品超碰| 国产欧美精品xxxx另类| www.51av欧美视频| 色老头一区二区三区在线观看| 人人妻人人澡人人爽精品日本| 欧美性大战久久久| 日本在线小视频| 成人免费在线观看入口| 亚洲激情视频小说| 高清不卡在线观看av| 五月天婷婷亚洲| 亚洲免费婷婷| 99久久免费观看| 日韩国产一区二区| 欧美极品一区二区| 亚洲精品国产九九九| 国产在线播放不卡| 精品国产第一福利网站| 久久久久久成人精品| 久久亚洲天堂| 在线午夜精品自拍| 牛牛澡牛牛爽一区二区| 精品国产一区久久| 97人妻一区二区精品免费视频| 日韩欧美主播在线| 久久久久成人网站| 亚洲色欲色欲www在线观看| 国精品无码人妻一区二区三区| 国产精品夜夜爽| 成人性生交免费看| 久久精品主播| 国产无套内射久久久国产| 欧美日韩在线大尺度| 香蕉精品视频在线| 日韩中文欧美| 亚洲国产一区二区精品视频 | 国产精品一区二区6| 一区二区在线免费| 手机在线免费看片| 中文字幕日韩欧美一区二区三区| 免费在线观看a视频| 久久久亚洲精品石原莉奈| 亚洲男人在线天堂| aaa国产一区| 9.1在线观看免费| 风间由美一区二区三区在线观看| 女王人厕视频2ⅴk| 国产成人福利片| 欧洲成人午夜精品无码区久久| 国产精品夜夜嗨| 动漫av在线免费观看| 丰满少妇久久久久久久| 国产精品嫩草69影院| 高清日韩电视剧大全免费| 亚洲丝袜在线观看| 国产ts人妖一区二区| 亚洲黄色小说在线观看| 国产91精品精华液一区二区三区| 国产艳妇疯狂做爰视频 | 久草精品电影| 亚洲精品亚洲人成在线| 欧美一级爱爱| 成人看的羞羞网站| 中文字幕中文字幕99| 在线成人直播| 一本久道高清无码视频| 99热精品在线观看| 国产aaa一级片| 青青草精品视频| 国产高清999| 丁香婷婷深情五月亚洲| 欧美做受喷浆在线观看| 国产视频一区二区三区在线观看| 我想看黄色大片| 亚洲人成在线播放网站岛国| 国产无遮挡又黄又爽在线观看| 精品福利在线视频| 黄色一区二区视频| 日韩视频免费观看高清完整版 | 色一情一乱一区二区三区| 日韩精品免费在线播放| 在线免费看黄| 欧美日韩国产成人在线观看| 日韩深夜视频| 成人免费观看a| 四虎5151久久欧美毛片| 伊人色综合久久天天五月婷| 黄色一区二区三区四区| www.欧美日本| 国产成人综合网| 性欧美13一14内谢| 亚洲女爱视频在线| 欧美亚洲精品天堂| 制服丝袜中文字幕一区| 亚洲aaaaaaa| xxav国产精品美女主播| 国产极品人妖在线观看| 国产精品男人的天堂| 伊人精品综合| 亚洲高清在线观看一区| 欧美日本一区| 国产一线二线三线在线观看| 国产经典欧美精品| 蜜桃久久精品成人无码av| 一区二区三区在线视频免费观看| 午夜精品久久久久久久蜜桃| 日韩欧美成人激情| av资源网在线观看| 97福利一区二区| 精品91福利视频| 少妇特黄a一区二区三区| 亚洲无线视频| www.com久久久| 日本一区二区视频在线| 日本三级视频在线| 欧美一级艳片视频免费观看| 欧洲av无码放荡人妇网站| 日本视频在线观看| 欧美激情视频在线| xxxxx.日韩| 免费一区二区三区| 日韩亚洲国产欧美| 精品人妻人人做人人爽夜夜爽| 国产精品乱码久久久久久| 久久国产黄色片| 精品国产91洋老外米糕| 成人毛片av在线| 成人激情视频网| 精品国产乱码| 116极品美女午夜一级| 成人免费高清在线| 久草视频中文在线| 欧美一区在线视频| 天天综合视频在线观看| 国产成人拍精品视频午夜网站 | 久久精品二区亚洲w码| 久久精品—区二区三区舞蹈| 午夜欧美一区二区三区在线播放| www三级免费| 久久91亚洲精品中文字幕奶水| 高清久久一区| 日日噜噜噜夜夜爽爽| 麻豆视频一区二区| 欧美另类69xxxx| 欧美亚洲综合色| jizz视频在线观看| 国产精品高清在线| 欧美日韩高清| 色综合天天色综合| 中文字幕精品一区二区精品绿巨人| 欧美a视频在线观看| 亚洲色图美腿丝袜| 欧美影视资讯| 色噜噜狠狠一区二区三区| 视频在线观看91| аⅴ天堂中文在线网| 欧美午夜视频网站| 调教视频免费在线观看| 成人黄色片网站| 久久久久国产精品| 在线观看网站黄| 亚洲成av人片| 日韩精品福利| 国产精品日韩欧美综合| 婷婷亚洲综合| 俄罗斯女人裸体性做爰| 亚洲综合激情网| 完全免费av在线播放| 亚洲欧美激情在线| 亚洲第一黄色片| 午夜美女久久久久爽久久| 日韩激情毛片| www.日本xxxx| 1区2区3区欧美| 亚洲国产精品一| 91精品国产99| av中文一区| 69久久精品无码一区二区| 亚洲国产欧美另类丝袜| 三级在线观看| 国产一区二区色| 一区二区亚洲精品| www.久久国产| 9191精品国产综合久久久久久| 精灵使的剑舞无删减版在线观看| 久久国产精品-国产精品| 免费观看成人鲁鲁鲁鲁鲁视频| 国产成人av免费在线观看| 精品国产髙清在线看国产毛片| 亚洲人成午夜免电影费观看| 亚洲高清123| 丁香六月综合激情| 中文在线第一页| 久久夜色撩人精品| 亚洲精品推荐| 中文字幕无码毛片免费看| 欧美性生活大片免费观看网址| 九七久久人人| 精品乱码一区| 激情综合五月天| 国产又粗又爽视频| 久久999免费视频| 国产99精品| 中文字幕18页| 欧美日韩视频第一区| 麻豆免费在线| 久久久久久久久网|