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

iOS面試題·項(xiàng)目中用過 Runtime 嗎?

移動(dòng)開發(fā)
我們知道靜態(tài)語言在編譯時(shí)期,就已經(jīng)確定了函數(shù)的具體調(diào)用,而動(dòng)態(tài)語言要等到運(yùn)行時(shí)期才能真正確定調(diào)用哪個(gè)函數(shù); Objective-C 是一門動(dòng)態(tài)語言,它是通過 Runtime 這個(gè)運(yùn)行時(shí)機(jī)制來實(shí)現(xiàn)的。

前言

我們知道靜態(tài)語言在編譯時(shí)期,就已經(jīng)確定了函數(shù)的具體調(diào)用,而動(dòng)態(tài)語言要等到運(yùn)行時(shí)期才能真正確定調(diào)用哪個(gè)函數(shù); Objective-C 是一門動(dòng)態(tài)語言,它是通過 Runtime 這個(gè)運(yùn)行時(shí)機(jī)制來實(shí)現(xiàn)的。

[[248751]]

雖然說 Runtime 是相對于底層的機(jī)制,但是在項(xiàng)目過程中也經(jīng)常用來解決一些問題。下面我們就來看看利用 Runtime 可以解決項(xiàng)目中什么問題。

項(xiàng)目中用 Runtime 實(shí)現(xiàn)的功能

利用關(guān)聯(lián)對象為分類增加偽屬性

在項(xiàng)目的開發(fā)中,經(jīng)常會(huì)遇到要為已經(jīng)存在的類添加屬性。面對這種情況,我們一般都是創(chuàng)建一個(gè)分類,來實(shí)現(xiàn)為已有的類增加屬性,但是由于分類結(jié)構(gòu)的特殊性,在分類添加屬性,并不會(huì)為我們自動(dòng)創(chuàng)建實(shí)例變量和存儲(chǔ)方法。

首先我們要知道,常規(guī)定義一個(gè) @property,其實(shí)編譯器會(huì)為我們做三件事情:

  • 生成實(shí)例變量 _property
  • 生成 getter 方法
  • 生成 setter 方法

但是,在分類中并不會(huì)幫我們?nèi)ド蓪?shí)例變量和存取方法,所以我們需要自己去實(shí)現(xiàn)存取方法,這里我們會(huì)通過關(guān)聯(lián)對象去將鍵值關(guān)聯(lián)到對象上面去,以下是代碼示例: 

  1. @property (nonatomic, strong) NSString *title; 
  2.  
  3. - (NSString *)title { 
  4.     return objc_getAssociatedObject(self, _cmd); 
  5.  
  6. - (void)setTitle:(NSString *)title { 
  7.     objc_setAssociatedObject(self, @selector(title), title, OBJC_ASSOCIATION_RETAIN); 

這個(gè)我們暫時(shí)只講如何通過關(guān)聯(lián)對象為分類增加偽屬性,至于分類為什么不會(huì)為我們自動(dòng)添加實(shí)例變量和存取方法,以及關(guān)聯(lián)對象的實(shí)現(xiàn)原理等,我們會(huì)在后面的面試題繼續(xù)涉及到這一話題。

利用 Method Swizzling 交換方法

我們可以用 Method Swizzling 來交換兩個(gè)方法的實(shí)現(xiàn),以便達(dá)到 Hook 的效果;例如交換 ViewController 生命周期方法來實(shí)現(xiàn)頁面埋點(diǎn),或者在不影響原有的功能增加一些特殊的功能。

交換方法主要是利用到 Runtime 中的class_addMethod 、class_replaceMethod、method_exchangeImplementations 方法來實(shí)現(xiàn)的,以下是 Method Swizzling 代碼示例: 

  1. /** 
  2.  交換方法 
  3.  */ 
  4. + (void)pxy_swizzleMethodWithOriginalSelector:(SEL)originalSelector swizzledSelector:(SEL)swizzledSelector { 
  5.     Class class = [self class]; 
  6.  
  7.     SEL originalSeletor = originalSelector; 
  8.     SEL swizzledSeletor = swizzledSelector; 
  9.  
  10.     Method originMethod = class_getInstanceMethod(class, originalSeletor); 
  11.     Method swizzledMethod = class_getInstanceMethod(class, swizzledSeletor); 
  12.  
  13.     //先嘗試給源SEL添加IMP,這里是為了避免源SEL沒有實(shí)現(xiàn)IMP的情況 
  14.     BOOL didAddMethod = class_addMethod(class, originalSeletor, method_getImplementation(swizzledMethod), method_getTypeEncoding(swizzledMethod)); 
  15.     if (didAddMethod) { 
  16.         //添加成功:說明源SEL沒有實(shí)現(xiàn)IMP,將源SEL的IMP替換到交換SEL的IMP 
  17.         class_replaceMethod(class, swizzledSeletor, method_getImplementation(originMethod), method_getTypeEncoding(originMethod)); 
  18.     } else { 
  19.         //添加失敗:說明源SEL已經(jīng)有IMP,直接將兩個(gè)SEL的IMP交換即可 
  20.         method_exchangeImplementations(originMethod, swizzledMethod); 
  21.     } 

利用 class_copyIvarList 實(shí)現(xiàn) NSCoding 的自動(dòng)歸檔解檔

在利用 NSKeyedArchiver 歸檔解檔對象的時(shí)候,對象 Model 需要實(shí)現(xiàn) NSCoding 協(xié)議,并且要實(shí)現(xiàn) encodeWithCoder、initWithCoder 兩個(gè)方法,在這兩個(gè)方法中要為每個(gè)屬性進(jìn)行 code 和 encode,不然就會(huì) crash。

在項(xiàng)目開發(fā)過程中,經(jīng)常會(huì)出現(xiàn) Model 中的屬性會(huì)變更,這個(gè)時(shí)候總是會(huì)忘記去修改對應(yīng)的屬性 code 和 encode,這里就會(huì)導(dǎo)致 crash;為了避免這個(gè)現(xiàn)象和讓 Model 中的方法更加簡潔可控,這里我們會(huì)利用 class_copyIvarList 來獲取對象中的成員變量列表,然后利用 KVC 來 code 和 encode。實(shí)例代碼如下:(這里我們將這個(gè)通用的代碼抽象成宏,這樣子在需要的 Model 中直接調(diào)用就可以了) 

  1. #define PXYNSCodingRuntime_EncodeWithCoder(Class) \ 
  2. unsigned int outCount = 0;\ 
  3. Ivar *ivars = class_copyIvarList([Class class], &outCount);\ 
  4. for (int i = 0; i < outCount; i++) {\ 
  5.     Ivar ivar = ivars[i];\ 
  6.     NSString *key = [NSString stringWithUTF8String:ivar_getName(ivar)];\ 
  7.     [aCoder encodeObject:[self valueForKey:key] forKey:key];\ 
  8. }\ 
  9. free(ivars);\ 
  10.  
  11. #define PXYNSCodingRuntime_InitWithCoder(Class)\ 
  12. if (self = [super init]) {\ 
  13.     unsigned int outCount = 0;\ 
  14.     Ivar *ivars = class_copyIvarList([Class class], &outCount);\ 
  15.     for (int i = 0; i < outCount; i++) {\ 
  16.         Ivar ivar = ivars[i];\ 
  17.         NSString *key = [NSString stringWithUTF8String:ivar_getName(ivar)];\ 
  18.         id value = [aDecoder decodeObjectForKey:key];\ 
  19.         if (value) {\ 
  20.             [self setValue:value forKey:key];\ 
  21.         }\ 
  22.     }\ 
  23.     free(ivars);\ 
  24. }\ 
  25. return self;\ 
  26.  
  27. // 對應(yīng)調(diào)用 
  28. - (void)encodeWithCoder:(NSCoder *)aCoder { 
  29.     PXYNSCodingRuntime_EncodeWithCoder(Father) 
  30. - (nullable instancetype)initWithCoder:(NSCoder *)aDecoder { 
  31.     PXYNSCodingRuntime_InitWithCoder(Father) 

利用 objc_allocateClassPair、object_setClass 等 API 來實(shí)現(xiàn) KVO Block

在項(xiàng)目中,會(huì)經(jīng)常使用 KVO 來監(jiān)聽某個(gè)屬性的變化。先給出系統(tǒng)調(diào)用的方式,添加監(jiān)聽后,在 observeValueForKeyPath 方法中處理變化: 

  1. - (void)addObserver:(NSObject *)observer forKeyPath:(NSString *)keyPath options:(NSKeyValueObservingOptions)options context:(nullable void *)context; 
  2.  
  3.  - (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSKeyValueChangeKey,id> *)change context:(void *)context { 
  4.  NSLog(@"%@ 對象的 %@ 屬性改變了:%@",object,keyPath,change); 
  5.  } 

但是在開發(fā)過程中,有時(shí)候想將代碼增加內(nèi)聚性和在 observeValueForKeyPath 減少判斷,我們可以通過 Runtime 來實(shí)現(xiàn)一個(gè) KVO Block,這樣調(diào)用地方即處理消息的地方,代碼上比較直觀,簡單 API 如下: 

  1. typedef void(^PXYKVOCompleteBlock)(id observer, NSString *keyPath, id oldValue, id newValue); 
  2.  
  3. /** 
  4.  添加 KVO Block 
  5.  */ 
  6. - (void)pxy_addObserver:(NSObject *)observer forKeyPath:(NSString *)keyPath completeBlock:(PXYKVOCompleteBlock)completeBlock; 
  7.  
  8. /** 
  9.  移除 KVO Block 
  10.  */ 
  11. - (void)pxy_removeObserver:(NSObject *)observer forKeyPath:(NSString *)keyPath; 

KVO 主要是動(dòng)態(tài)派生出一個(gè)中間類,然后在這個(gè)中間類處理相關(guān)通知邏輯,具體代碼可以 Demo 中的 NSObject+PXYKVO 具體實(shí)現(xiàn);

利用消息轉(zhuǎn)發(fā)機(jī)制實(shí)現(xiàn)多播委托(蹦床模式)

首先,在對象收到無法處理的消息之后,會(huì)執(zhí)行消息轉(zhuǎn)發(fā),消息轉(zhuǎn)發(fā)有三個(gè)步驟:

  • 調(diào)用 resolveInstanceMethod 方法。動(dòng)態(tài)方法解析,這里會(huì)給類使用 class_addMethod 來增加方法的機(jī)會(huì)。
  • 調(diào)用 forwardingTargetForSelector 方法,看是否有備用接收者,將消息轉(zhuǎn)發(fā)給備用接收者處理。
  • 調(diào)用 methodSignatureForSelector 和 forwardInvocation 方法,進(jìn)行完成的消息轉(zhuǎn)發(fā)。

如果經(jīng)過上面三個(gè)步驟,還不能正確處理消息,程序就會(huì)走 doesNotRecognizeSelector 方法,crash 掉。

蹦床模式:就是把一條消息 “反彈” 到另外一個(gè)對象,蹦床一般使用 forwardInvocation 來實(shí)現(xiàn)。

在項(xiàng)目開發(fā)中,事件回調(diào)一般使用:Block、Delegate、NSNotificationCenter;但是在多個(gè)模塊需要監(jiān)聽一個(gè)事件的場景:使用通知會(huì)將項(xiàng)目變得不可控,因?yàn)槿魏我粋€(gè)地方都可以監(jiān)聽這個(gè)通知,在排查問題的時(shí)候就會(huì)變得異常困難,這個(gè)時(shí)候我們可以使用多播委托,實(shí)現(xiàn)一對多回調(diào)。

大致原理:實(shí)現(xiàn)一個(gè)管理類,將需要回調(diào)的對象注冊進(jìn)來,然后將事件消息發(fā)送給這個(gè)管理類,由于這個(gè)管理類是沒有實(shí)現(xiàn)委托方法的,就不能正常處理這個(gè)消息,這個(gè)時(shí)候就會(huì)走消息轉(zhuǎn)發(fā)流程;然后我們通過消息轉(zhuǎn)發(fā)流程,將消息轉(zhuǎn)發(fā)到注冊進(jìn)來的對象中去,這樣子就要可以實(shí)現(xiàn)我們的多播委托了。

具體代碼可以看 Demo 中的 PXYMulticastDelegate 多播委托實(shí)現(xiàn)類。

總結(jié)

Objective-C 利用 Runtime 運(yùn)行時(shí)變成一門動(dòng)態(tài)語言,在開發(fā)過程中,使用 Runtime 相關(guān) API 可以實(shí)現(xiàn)一些很強(qiáng)大的功能,這里我們簡單講到使用 Runtime 完成為分類增加偽屬性、利用 Method SWizzling 來 Hook 方法、實(shí)現(xiàn) NSCoding 自動(dòng)歸檔解檔、實(shí)現(xiàn) KVO Block、多播委托。

當(dāng)然還可以實(shí)現(xiàn)更多的功能,比如字典模型之間的轉(zhuǎn)換、頁面無侵入埋點(diǎn)、監(jiān)聽 App 網(wǎng)絡(luò)流量等等。

還有可以實(shí)現(xiàn)什么好玩的功能,歡迎留言,感激不盡。

責(zé)任編輯:未麗燕 來源: 簡書
相關(guān)推薦

2022-07-12 12:05:22

JavaSemaphore

2020-06-04 14:40:40

面試題Vue前端

2016-03-03 10:07:39

ios內(nèi)存管理面試總結(jié)

2023-11-13 07:37:36

JS面試題線程

2011-03-24 13:27:37

SQL

2024-04-01 00:00:00

Redis緩存服務(wù)消息隊(duì)列

2021-08-05 05:04:50

熱部署模型字節(jié)

2009-06-06 18:34:05

java面試題

2009-06-06 18:36:02

java面試題

2015-09-02 09:32:56

java線程面試

2014-09-19 11:17:48

面試題

2019-11-26 10:30:11

CSS前端面試題

2023-07-28 08:04:56

StringHeaatomic線程

2025-02-26 07:58:41

2018-03-08 18:40:47

Java百度面試題

2013-01-05 14:51:34

JavaScriptjQuery面試

2023-07-14 08:12:21

計(jì)時(shí)器unsafecontext

2014-07-28 14:00:40

linux面試題

2024-06-04 14:52:28

2021-02-23 12:43:39

Redis面試題緩存
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

四虎884aa成人精品最新| 国产一二三区在线观看| 免费看亚洲片| 国产一区二区三区直播精品电影| 91日韩视频在线观看| 老司机午夜在线视频| www.av亚洲| 国产美女久久久| 精品少妇久久久| 国产精品中文字幕亚洲欧美| 56国语精品自产拍在线观看| 欧美一级视频在线播放| 川上优的av在线一区二区| 国产乱码精品一区二区三区av | 日韩欧美在线第一页| 亚洲精品一区二| 欧美自拍第一页| 麻豆精品一区二区av白丝在线| 欧美超级乱淫片喷水| 波多野结衣a v在线| 日本99精品| 欧美亚洲丝袜传媒另类| 国产精品久久..4399| 三区四区在线视频| 久久婷婷国产综合国色天香| 豆国产97在线| 国产又粗又猛又爽又黄的视频一| 在线视频免费在线观看一区二区| 久久精品一区中文字幕| 久久精品成人av| 77成人影视| 宅男噜噜噜66一区二区66| 成人免费观看毛片| 波多一区二区| 亚洲免费观看高清完整版在线| 欧美少妇一区| 污视频在线免费观看| 国产一区二区在线观看视频| 国产精品电影久久久久电影网| 久久久一二三区| 五月天久久777| 这里精品视频免费| 免费毛片视频网站| 日韩av网站在线免费观看| 欧美精品一区二区三区视频| 中文字幕第10页| 成人综合日日夜夜| 欧美日韩在线观看一区二区| 国产一区亚洲二区三区| 欧美私密网站| 精品久久久香蕉免费精品视频| 欧美性潮喷xxxxx免费视频看| 大片免费在线看视频| 成人欧美一区二区三区1314| 翔田千里亚洲一二三区| 国产中文字幕在线| 久久久精品综合| 欧美一区二区三区精美影视| 欧美一区二区少妇| 久久香蕉国产线看观看99| 久久国产精品久久精品国产| 亚洲欧洲成人在线| 久久综合色鬼综合色| 欧美13一14另类| av影片免费在线观看| 欧美韩日一区二区三区| 一区二区国产日产| caoporn97在线视频| 亚洲精品亚洲人成人网在线播放| 黄色污污在线观看| 欧美大胆的人体xxxx| 香蕉影视欧美成人| 日韩视频第二页| 亚洲日本在线观看视频| 欧美日韩高清一区二区不卡| 天天色天天综合网| **爰片久久毛片| 日韩av网站在线| 欧美大波大乳巨大乳| 久久国产中文字幕| 欧美精品videosex性欧美| 日韩污视频在线观看| 久久久久久久高潮| 成人午夜小视频| 国产精品一级视频| www.av精品| 亚洲三区视频| 美女精品导航| 日本高清视频一区二区| 午夜剧场在线免费观看| 91成人入口| 亚洲视频在线播放| 日本午夜在线观看| 亚洲高清电影| 国产精品视频男人的天堂| av中文字幕第一页| 久久久久久影视| 国产经典久久久| 天堂中文在线播放| 91精品婷婷国产综合久久性色| 欧美性生交xxxxx| 欧美丝袜丝交足nylons172| 欧美成人免费一级人片100| 好吊妞视频一区二区三区| 久久成人久久鬼色| 国产一区在线免费观看| 日韩在线资源| 五月婷婷欧美视频| 99日在线视频| 少妇精品久久久一区二区| 久久69精品久久久久久久电影好| 九九精品免费视频| 国产另类ts人妖一区二区| 欧美一区视久久| 女子免费在线观看视频www| 色婷婷综合中文久久一本| 极品人妻一区二区| 日韩大片在线| 国语自产精品视频在免费| 亚洲一区二区视频在线播放| 91视频一区二区三区| 四虎免费在线观看视频| 电影久久久久久| 亚洲精品一区二区三区不| 久久精品波多野结衣| 精品在线免费视频| 日本在线免费观看一区| 国产精品一二三产区| 69堂精品视频| 中国1级黄色片| 日日夜夜一区二区| 久久精品综合一区| av中文字幕在线看| 欧美大片一区二区| 国产一区二区播放| 黄页网站大全一区二区| 亚洲精品永久www嫩草| 奇米777日韩| 亚洲精品不卡在线| 国产一级视频在线| 国产精品一区二区免费不卡| 中文字幕精品一区日韩| a成人v在线| 一本色道久久综合狠狠躁篇的优点| 国产成人在线观看网站| 成人在线视频一区| www.国产在线视频| 国产精品zjzjzj在线观看| 欧美精品日韩三级| 成 人 黄 色 片 在线播放| 亚洲人123区| 亚洲无在线观看| 欧美福利电影在线观看| 99久久一区三区四区免费| 天堂av资源在线观看| 欧美一级高清大全免费观看| 国产探花在线视频| 韩国成人精品a∨在线观看| 亚洲美女自拍偷拍| 精品国产亚洲一区二区三区在线 | 美国三级日本三级久久99 | 在线免费黄色| 欧美日韩www| 99久久99久久精品国产| 国产精品亚洲成人| 免费超爽大片黄| 夜夜躁狠狠躁日日躁2021日韩| 国产99久久精品一区二区永久免费| 清纯唯美亚洲色图| 欧美三级韩国三级日本三斤| 国产在视频线精品视频| 国产精品自在欧美一区| 丰满的少妇愉情hd高清果冻传媒| 岛国成人av| 日韩av手机在线看| 一广人看www在线观看免费视频| 在线不卡免费av| 久久久久久久久久久久久久久久久 | 亚洲欧美一区二区久久| 少妇伦子伦精品无吗| 国产精品久久久久毛片大屁完整版| 久久久久久久久久久一区| 欧美xxxx做受欧美护士| x99av成人免费| 蜜桃视频久久一区免费观看入口| 欧美体内谢she精2性欧美| 2019男人天堂| 国产不卡免费视频| 激情婷婷综合网| 一区二区电影| 欧美性大战久久久久| 香蕉久久一区| 91精品国产高清| 免费在线你懂的| 亚洲国产欧美一区| 国产又粗又猛视频| 黄色精品在线看| 亚洲区一区二区三| 91美女视频网站| 中文字幕人妻无码系列第三区| 国产偷自视频区视频一区二区| 亚洲免费视频一区| 欧美一级一片| 91欧美精品成人综合在线观看| 男人av在线播放| 久久国产精品免费视频 | xxxxxhd亚洲人hd| 国产精品91久久| 99re6在线精品视频免费播放| 在线观看久久av| 五月婷婷狠狠干| 欧美一级一级性生活免费录像| 91精品国产高清一区二区三密臀| 亚洲女女做受ⅹxx高潮| 亚洲人成人无码网www国产| 国产成人综合自拍| 亚洲77777| 国产精品日韩| 久久综合久久网| 久久中文字幕av一区二区不卡| 欧美精品人人做人人爱视频| 亚洲开心激情| 91久久精品美女| 成人免费黄色| 国产成人av网址| 美女高潮视频在线看| 欧美黄色免费网站| 黄色网在线免费看| 日韩中文字幕国产| 最新av网站在线观看| 亚洲人成自拍网站| 欧美777四色影视在线| 亚洲成人免费在线视频| 午夜精品小视频| 欧美一二三区在线观看| 一级日韩一级欧美| 欧美日韩一区二区在线观看视频| 亚洲自拍一区在线观看| 欧美视频中文在线看| 丁香六月婷婷综合| 欧美日韩在线免费观看| 欧美三级韩国三级日本三斤在线观看| 亚洲另类在线一区| 国产极品国产极品| 亚洲精品视频一区| 黄色一级片在线| 亚洲综合精品久久| 久操免费在线视频| 香蕉加勒比综合久久| 国产一级二级三级视频| 亚洲国产精品久久艾草纯爱| 久久精品视频日本| 天天影视涩香欲综合网| 青草视频在线观看免费| 在线观看国产日韩| 中文字幕在线播出| 91精品欧美福利在线观看| 国产丝袜在线视频| 欧美成人aa大片| 五月婷婷丁香六月| 亚洲天堂av综合网| 香港伦理在线| 萌白酱国产一区二区| 在线观看中文字幕的网站| 久久久久久久久久久久av| 1区2区在线| 日韩免费在线免费观看| 免费视频观看成人| 99re在线观看| 日本福利一区| 色综合电影网| 欧美 日韩 国产精品免费观看| 男的插女的下面视频| 丝袜亚洲另类丝袜在线| 五月天中文字幕在线| 成人在线综合网| 国产在线观看h| 中文字幕一区二区视频| 久久久久久蜜桃| 欧美午夜xxx| 国产精品无码白浆高潮| 亚洲国产一区二区三区四区| 高h视频在线| 久久69精品久久久久久久电影好| 黄色漫画在线免费看| 国产精品久久久久久超碰| 老司机亚洲精品一区二区| 久久亚洲高清| 天天av综合| 国产男女在线观看| 极品少妇xxxx偷拍精品少妇| 2一3sex性hd| 国产精品夫妻自拍| 91香蕉在线视频| 91精品国产欧美日韩| 黄色在线网站| 久久久久久久av| 激情亚洲小说| 精品在线观看一区二区| 午夜精品一区二区三区国产 | 日韩福利电影在线观看| 亚洲av综合色区无码另类小说| 久久久99精品免费观看不卡| 朝桐光av在线| 精品视频在线免费| 性xxxfllreexxx少妇| 久久影院在线观看| 高清电影一区| 久久99久久精品国产| 香蕉综合视频| 手机在线免费观看毛片| 成人a区在线观看| 亚洲av鲁丝一区二区三区| 欧美在线免费视屏| 神马电影在线观看| 欧美激情一级欧美精品| 高清久久一区| 亚洲电影免费| 久久久久久网| 亚洲色图14p| 亚洲一区二区三区四区五区黄| 一二区在线观看| 国产一区二区三区视频在线观看| 182在线播放| 春色成人在线视频| 一区二区三区网站| 手机版av在线| 国产精品久久久久毛片软件| 三级网站在线播放| 国产视频精品在线| 国产拍在线视频| 国产欧美精品一区二区三区| 好吊日精品视频| 国产一级片中文字幕| 亚洲欧美日韩中文播放| 国产一区二区三区黄片| 自拍偷拍亚洲在线| 蜜桃视频成人m3u8| 日韩资源av在线| 久久亚洲综合| 人人人妻人人澡人人爽欧美一区| 精品久久久久久久大神国产| 色一情一乱一乱一区91av| 欧美激情一级欧美精品| 狠狠一区二区三区| 国产资源在线视频| av在线这里只有精品| 可以免费看的av毛片| 亚洲美女视频网站| 欧美人与性动交xxⅹxx| 欧洲一区二区在线观看| 免费在线观看不卡| 免费成人美女女在线观看| 91精品一区二区三区久久久久久| av在线免费网址| 丁香婷婷久久久综合精品国产| 国产一区欧美| 日韩aaaaa| 在线观看日韩毛片| 在线免费观看黄色av| 成人黄在线观看| 欧美在线精品一区| 最新版天堂资源在线| 亚洲mv在线观看| 撸视在线观看免费视频| 国产精品久久久久91| 91精品观看| 国产白袜脚足j棉袜在线观看| 精品久久久久久国产91| 国产色在线 com| 国产在线日韩在线| 黄色亚洲免费| 草草地址线路①屁屁影院成人| 色综合天天综合给合国产| eeuss影院在线播放| 91精品国自产在线观看| 亚洲深夜激情| 精品熟妇无码av免费久久| 51精品秘密在线观看| 91九色在线播放| 日韩欧美视频一区二区三区四区| 捆绑调教美女网站视频一区| 精品视频一区二区在线观看| 亚洲欧美国产精品专区久久 | 日韩电影在线看| 中文字幕另类日韩欧美亚洲嫩草| 亚洲国产精品va| 色综合一区二区日本韩国亚洲 | 国产精品99久久久| wwwxxx亚洲| 操人视频在线观看欧美| 西野翔中文久久精品国产| 日韩精品aaa| 欧美三级免费观看| 操你啦在线视频| 区一区二区三区中文字幕| 国产成人啪午夜精品网站男同| 7799精品视频天天看| 欧美激情精品久久久久久久变态| 欧美日韩伦理在线免费|