日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

JSPatch defineProtocol 实现详解

發(fā)布時間:2025/3/8 javascript 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JSPatch defineProtocol 实现详解 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

遷移老文章到掘金

這是上一篇博客提到的代碼的深入剖析

note:這個是JSPatch附屬新增的小功能點(diǎn),想要詳細(xì)了解JsPatch整體部分的工作及原理戳這個wiki JSPatch實(shí)現(xiàn)原理詳解

出發(fā)點(diǎn)

一個不小心引發(fā)的bad case

工作中遇到了一個case,有一部分代碼被重構(gòu)了,一個函數(shù)被徹底的廢棄并且.m文件中的具體函數(shù)實(shí)現(xiàn)已經(jīng)被整體注釋掉了,但是.h文件這個函數(shù)還存在.

由于被重構(gòu)的那部分在客戶端很多處代碼都有調(diào)用,沒有及時的替換成最新的函數(shù),導(dǎo)致造成了線上crash,unrecognized selector.

我最開始想用JsPatch發(fā)出一個hotfix,既然是unrecognized selector,具體的函數(shù)實(shí)現(xiàn)不存在,那么我用JSPatch動態(tài)補(bǔ)上這個函數(shù)實(shí)現(xiàn),就可以封住crash了.

結(jié)果操作后發(fā)現(xiàn),無法實(shí)現(xiàn),原因是.h文件中這個selector里面有一個非id類型的參數(shù).

JSPatch只能新增參數(shù)類型為id的方法

在JsPatch的Wiki中defineClass 有一句說明

可以給一個類隨意添加 OC 未定義的方法,但所有的參數(shù)類型都是 id:

為什么會這樣,探究其源碼可以發(fā)現(xiàn)

if (!overrided) {NSMutableString *typeDescStr = [@"@@:" mutableCopy];for (int i = 0; i < numberOfArg; i ++) {[typeDescStr appendString:@"@"];}overrideMethod(currCls, selectorName, jsMethod, !isInstance, [typeDescStr cStringUsingEncoding:NSUTF8StringEncoding]); } 復(fù)制代碼

當(dāng)使用defineClass對新方法命名的時候,defineClass能通過_自動識別參數(shù)的位置和個數(shù),但是并沒有能識別參數(shù)的類型。

而在通過這段代碼創(chuàng)建新方法的時候,需要輸入方法的type encode,由于defineClass只有參數(shù)的個數(shù)和位置信息,并未獲得參數(shù)的類型,因此JsPatch默認(rèn)要求新方法所有輸入的參數(shù)都是id類型,返回的參數(shù)也必須是id類型,通過@@:+參數(shù)數(shù)量個@來生成,只允許id類型的參數(shù)及返回的新方法

關(guān)于type encode后面會詳細(xì)解釋

當(dāng)我在嘗試通過JsPatch修復(fù)我的case的時候,由于我希望新增的方法是一個含有非id類型參數(shù)的方法,而JsPatch最終添加的新方法的參數(shù)都是id,所以程序運(yùn)行的時候依然會crash,因?yàn)樗€是找不到那個他想要的方法,依然是unrecognized selector

修改思路

知道原因,尋找思路

  • defineClass為覆蓋修改方法而設(shè)計(jì),對于新增方法,傳入的信息不足,不能生成正確的type encode,所以無法正確的添加任意參數(shù)類型的方法,于是統(tǒng)一設(shè)定為id類型
  • 如果由使用者傳入足夠的信息,借而生成正確的type encode,則我們的目的就可以達(dá)成

我們可以考慮修改defineClass的input,專門在新增方法處開新的接口傳入?yún)?shù),從而使得一切信息都能到手,正常生成正確的新方法。

但是眼下還有2個問題

  • defineClass在設(shè)計(jì)上,新增方法和覆蓋修改方法走的是同一個輸入口,單獨(dú)為新增方法而重新調(diào)整輸入接口,會使代碼邏輯和設(shè)計(jì)模式變化比較大
  • 在用戶已經(jīng)養(yǎng)成的JsPatch編寫習(xí)慣上,新增和覆蓋二者本是統(tǒng)一的,為新增方法而大改defineClass的輸入模式,勢必會讓已經(jīng)習(xí)慣使用的用戶有很大不便
  • 尋找一個合適的方案,能不大范圍影響現(xiàn)在的設(shè)計(jì)模式,又能完成我的想法

defineClass的Protocol

JsPatch的defineClass 中提到的Protocol的作用

可以在定義時讓一個類實(shí)現(xiàn)某些 Protocol 接口,寫法跟 OC 一樣:

defineClass("JPViewController: UIViewController<UIScrollViewDelegate, UITextViewDelegate>", {})

這樣做的作用是,當(dāng)添加 Protocol 里定義的方法,而類里沒有實(shí)現(xiàn)的方法時,參數(shù)類型不再全是 id,而是自動轉(zhuǎn)為 Protocol 里定義的類型:

看到原作者bang的說明我們就可以明白,defineClass中的Protocol的作用本是借助已經(jīng)存在的Protocol的定義,從已經(jīng)存在的Protocol中就可以抽取出描述selector的type encode,進(jìn)而生成含有非id參數(shù)的方法描述,從而能新增出正確的方法。

我們還可以看下源碼,就一清二楚

if (class_respondsToSelector(currCls, NSSelectorFromString(selectorName))) {overrideMethod(currCls, selectorName, jsMethod, !isInstance, NULL); } else {BOOL overrided = NO;for (NSString *protocolName in protocols) {char *types = methodTypesInProtocol(protocolName, selectorName, isInstance, YES);if (!types) types = methodTypesInProtocol(protocolName, selectorName, isInstance, NO);if (types) {overrideMethod(currCls, selectorName, jsMethod, !isInstance, types);free(types);overrided = YES;break;}}if (!overrided) {NSMutableString *typeDescStr = [@"@@:" mutableCopy];for (int i = 0; i < numberOfArg; i ++) {[typeDescStr appendString:@"@"];}overrideMethod(currCls, selectorName, jsMethod, !isInstance, [typeDescStr cStringUsingEncoding:NSUTF8StringEncoding]);} } 復(fù)制代碼

源碼中先判斷是否該方法已經(jīng)存在,存在的情況下進(jìn)行覆蓋,如果不存在,先判斷defineClass中是否指定了Protocol,指定了的話從Protocol中尋找匹配的Method進(jìn)行覆蓋和新增,如果在指定Protocol中也找不到,才進(jìn)行強(qiáng)制id參數(shù)類型的方法新增。

所以我選一個比較好的角度,既不破壞原本defineClass的設(shè)計(jì)邏輯,又能將新的參數(shù)傳入其中。

那就是設(shè)計(jì)一個全新的接口defineProtocol,在這個全新的接口里面輸入足夠多的參數(shù)信息,進(jìn)而通過運(yùn)行時創(chuàng)建全新的Protocol,創(chuàng)建完成的新Protocol就自然可以借助defineClass里面的功能,引入正確的新增方法

具體實(shí)現(xiàn)

JS接口設(shè)計(jì)

一開始我是想直接讓使用者輸入type encode這樣也省了我的事,后來和原作者交流覺得,盡可能的節(jié)省使用者的學(xué)習(xí)成本,畢竟type encode不知道的人還真不太能很快搞明白這一大堆: # @ v b i的亂七八糟字符到底該怎么寫,如果輸入接口這樣,就會比較直觀

defineProtocol('lalalala',{testProtocol: {paramsType:"int, id",returnType:"BOOL"},... }, {... }); 復(fù)制代碼

使用者直接輸入int,float,id,void等,由代碼自動識別生成最終的type encode,而且因?yàn)樽詣幼R別需代碼進(jìn)行逐一的支持和轉(zhuǎn)換,有些特殊的參數(shù)類型,代碼轉(zhuǎn)換并不能完全覆蓋,于是還添加了一個可選的參數(shù)typeEncode,一旦自動轉(zhuǎn)換無法支持的參數(shù)類型,就可以通過可選參數(shù),需要使用者自己想辦法手寫type encode了,主要無法支持的參數(shù)是用戶自定義的struct

代碼實(shí)現(xiàn)

JS接口這部分實(shí)現(xiàn)就不詳細(xì)描述了,和JSPatch其他接口完全一致,

看下對比是不是和defineClass一模一樣?^_^

context[@"_OC_defineProtocol"] = ^(NSString *protocolDeclaration, JSValue *instProtocol, JSValue *clsProtocol) {return defineProtocol(protocolDeclaration, instProtocol,clsProtocol);};context[@"_OC_defineClass"] = ^(NSString *classDeclaration, JSValue *instanceMethods, JSValue *classMethods) {return defineClass(classDeclaration, instanceMethods, classMethods);}; 復(fù)制代碼

通過運(yùn)行時objc_allocateProtocol創(chuàng)建新Protocol,通過protocol_addMethodDescription來為新Protocol增加方法,通過objc_registerProtocol來注冊新Protocol,這是基本的runtime代碼,不多描述了,源碼里都可以看到

唯一需要注意的是新protocol一經(jīng)注冊生效objc_registerProtocol,就不可在更改了,所以defineProtocol不能修改已經(jīng)存在的Protocol

protocol_addMethodDescription需要輸入seletorName和type encode,接下來重點(diǎn)說下如何在js返回的字典里識別這兩個參數(shù)

識別selector

如接口設(shè)計(jì)里面的樣例testProtocol,是被當(dāng)做字典中的key,可以直接取出來的,因?yàn)槲覀冊O(shè)計(jì)defineProtocol中Js新方法的命名和defineClass一致,都是參數(shù)用_代替,原本的_下劃線用__代替,所以解析key這個字符串的步驟和defineClass也一致

NOTES:源碼中需要用paramsType的個數(shù)來判斷函數(shù)名結(jié)尾是否存在參數(shù),所以在typeEncode可選參數(shù)使用的情況下,paramsType可以隨意輸入任意的字符串,但是必須保證數(shù)量匹配

識別type encode

如接口設(shè)計(jì)里面的樣例,參數(shù)會輸入"int, id"這樣的字符串,返回值會輸入"void"這樣的字符串,前者再通過,號拆分成字符串?dāng)?shù)組,就接下來就可以通過代碼獲取了,我打算構(gòu)建一個有限字符串映射表typeEncodeDic,以type字符串為key,映射int到i這樣。

typeEncodeDic這個表已經(jīng)構(gòu)建好了,這樣從js傳來的type字符串當(dāng)做key,直接從這個表里就能get到編碼。

人肉去寫這個表太low了,怎么也得用酷炫一點(diǎn)的方式支持一下,看到原作者bang,在JsPatch里面風(fēng)騷的宏的用法,我也照貓畫虎了一個

NSMutableDictionary* typeEncodeDic = [[NSMutableDictionary alloc]init]; #define JP_DEFINE_TYPE_ENCODE_CASE(_type) \ if ([@#_type length] > 0) {\char* encode = @encode(_type);\NSString * encodestr = [NSString stringWithUTF8String:encode];\[typeEncodeDic setObject:encodestr forKey:@#_type];\ } JP_DEFINE_TYPE_ENCODE_CASE(id); 復(fù)制代碼

JP_DEFINE_TYPE_ENCODE_CASE這個宏就自動的將輸入?yún)?shù)_type通過語法糖@encode()寫入字典,這里面還有一處很nb的地方

宏里面用參數(shù)生成靜態(tài)字符串

這是一個很trick的地方,原本我的宏是這么設(shè)計(jì)的JP_DEFINE_TYPE_ENCODE_CASE(@"id",id)為什么這么設(shè)計(jì)?因?yàn)槲腋悴欢ㄔ趺丛诤昀飳d轉(zhuǎn)成@“id”,試了很多種方法都不行╮(╯_╰)╭

后來原作者bang交流,他給了解決辦法,@#_type他在JsPatch里已經(jīng)用到了,說他當(dāng)初也遇到一樣的困擾,然后查到的。

所以最終這個宏被設(shè)計(jì)成了這樣。

JP_DEFINE_TYPE_ENCODE_CASE(id);JP_DEFINE_TYPE_ENCODE_CASE(BOOL);JP_DEFINE_TYPE_ENCODE_CASE(int);JP_DEFINE_TYPE_ENCODE_CASE(void);JP_DEFINE_TYPE_ENCODE_CASE(char);JP_DEFINE_TYPE_ENCODE_CASE(short);JP_DEFINE_TYPE_ENCODE_CASE(unsigned short);JP_DEFINE_TYPE_ENCODE_CASE(unsigned int);JP_DEFINE_TYPE_ENCODE_CASE(long);JP_DEFINE_TYPE_ENCODE_CASE(unsigned long);JP_DEFINE_TYPE_ENCODE_CASE(long long);JP_DEFINE_TYPE_ENCODE_CASE(float);JP_DEFINE_TYPE_ENCODE_CASE(double);JP_DEFINE_TYPE_ENCODE_CASE(CGFloat);JP_DEFINE_TYPE_ENCODE_CASE(CGSize);JP_DEFINE_TYPE_ENCODE_CASE(CGRect);JP_DEFINE_TYPE_ENCODE_CASE(CGPoint);JP_DEFINE_TYPE_ENCODE_CASE(CGVector);JP_DEFINE_TYPE_ENCODE_CASE(UIEdgeInsets);JP_DEFINE_TYPE_ENCODE_CASE(NSInteger);JP_DEFINE_TYPE_ENCODE_CASE(Class);JP_DEFINE_TYPE_ENCODE_CASE(SEL); 復(fù)制代碼

從這可以看出來,想要擴(kuò)展支持更多的參數(shù)類型?沒問題,在這里添加就好了(不想修改源碼,動態(tài)添加就走之前說的可選參數(shù)typeEncode)

處理id類型參數(shù)

看到上面我們知道,如果我的新函數(shù)中存在id類型,無論是系統(tǒng)類型NSArray還是用戶自己寫的CustomObject,在使用我們的defineProtocol的時候用戶需要自己記得所有的NSObject都要輸入id,仔細(xì)想想這也挺不方便的對吧?

所以我額外做了一個處理,當(dāng)從typeEncodeDic表里面找不到對應(yīng)的key的時候,就會NSClassFromString來判斷是否是一個Oc對象,如果是自動轉(zhuǎn)換為id的類型編碼@

NSString* argencode = [typeEncodeDic objectForKey:argstr]; if (argencode.length <= 0) {Class cls = NSClassFromString(argstr);if ([(id)cls isKindOfClass:[NSObject class]]) {argencode = @"@";} } 復(fù)制代碼

這樣無論用戶輸入類名還是id,我這邊的處理都是完全一樣,等效的

paramsType:"id" paramsType:"CustomObject" 復(fù)制代碼

生成SEL的類型編碼

SEL的類型編碼命名方式是這樣的

- (void) setSomething:(id) anObject 復(fù)制代碼

這個函數(shù)他的類型編碼是

v@:@ 復(fù)制代碼
  • 第一個v代表返回值是void即void的類型編碼
  • 第二個@代表self(其實(shí)是第一個參數(shù) Self和SEL是任何oc函數(shù)的隱藏參數(shù)),這個基本是固定的
  • 第三個:代表SEL(其實(shí)是第二個參數(shù) Self和SEL是任何oc函數(shù)的隱藏參數(shù)),這個基本是固定的
  • 第四個@代表Oc函數(shù)第一個參數(shù)的類型即id的類型編碼

通過這些規(guī)律,我們可以手寫SEL的類型編碼了,每一種參數(shù)類型可以查詢蘋果的定義

代碼中可選參數(shù)typeEncode優(yōu)先級最高,如果用戶手寫了可選參數(shù),則不會執(zhí)行代碼自動生成,直接使用用戶輸入的typeEncode,生成Protocol。

if (typeEncode) {addMethodToProtocol(protocol, selectorName, typeEncode, isInstance); }else {//type encode string automatic create } 復(fù)制代碼

詳探TypeEncode

我們可以手寫typeEncode,其實(shí)也可以借助oc代碼生成typeEncode

我們先在代碼中實(shí)現(xiàn)- (void) setSomething:(id) anObject這個方法,然后使用下面的代碼,就能通過系統(tǒng)取出SEL的typeEncode

Class cls = self.class; SEL selstr = NSSelectorFromString(@"setSomething:"); Method method = class_getInstanceMethod(cls, selstr); const char* type = method_getTypeEncoding(method); 復(fù)制代碼

經(jīng)過系統(tǒng)的讀取,驚訝的發(fā)現(xiàn),系統(tǒng)算出來的type居然是v12@0:4@8,這他喵的一堆數(shù)字是什么鬼!,剛才不是說v@:@嘛????????!!!!!!

經(jīng)過我反復(fù)地測試,發(fā)現(xiàn)無論是輸入v12@0:4@8還是v@:@,Protocol都能正常的生成,一點(diǎn)區(qū)別也沒有,完全不影響使用,但是他喵的為什么系統(tǒng)就會多出來這么多數(shù)字?

棧溢出的一個回答似乎能解釋 StackOverFlow-What are the digits in an ObjC method type encoding string?

和gitHub上的@DevSonw聊,覺得這可能是一個字節(jié)補(bǔ)齊的過程,并不影響使用

總結(jié)

以上是生活随笔為你收集整理的JSPatch defineProtocol 实现详解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

国产精品一区二区av影院萌芽 | www色av | 久草视频免费 | 在线看片成人 | 欧美一二三四在线 | 久久伊人五月天 | 久久国产视频网 | 免费视频一二三区 | 欧美日韩免费一区二区 | 成人免费视频观看 | 免费的成人av | 黄色软件在线看 | 十八岁免进欧美 | 国产91对白在线 | 日韩av成人在线观看 | 99久久精品国产亚洲 | 成人精品视频 | 国产精品9999 | 97视频在线播放 | 国产手机精品视频 | 99热国产在线 | 免费看毛片网站 | 99久在线精品99re8热视频 | 97人人模人人爽人人喊中文字 | 91看片淫黄大片在线播放 | 日韩免费一区二区在线观看 | 亚洲丁香日韩 | 999国产在线 | 国产专区免费 | 亚洲九九爱 | 日韩最新av| 日韩精品91偷拍在线观看 | 91欧美在线| 中文字幕乱码电影 | 夜添久久精品亚洲国产精品 | 97超碰人人模人人人爽人人爱 | 日本久久久久久久久久 | 免费av网址在线观看 | 在线观看va| 日日噜噜噜噜夜夜爽亚洲精品 | 91九色免费视频 | 少妇bbb好爽 | 国产精品com | av网站免费在线 | 99爱这里只有精品 | 久久久影院一区二区三区 | 国际精品久久久久 | 国产日韩欧美在线免费观看 | 成人精品一区二区三区中文字幕 | 久久久999免费视频 日韩网站在线 | 色婷婷啪啪免费在线电影观看 | 成人黄色影片在线 | 国产精品18久久久久久久久 | www.av免费| 久久精品网站免费观看 | 99精品视频一区二区 | av免费福利 | 黄色毛片观看 | 激情丁香 | 中文字幕乱在线伦视频中文字幕乱码在线 | 福利一区二区 | 日韩三级在线 | 一区二区三区在线视频111 | 久久久久北条麻妃免费看 | 在线观看中文字幕亚洲 | 手机色站 | 免费在线a | 国产精品一区二区 91 | av网站免费线看精品 | 日韩激情在线视频 | 精品国产1区2区3区 国产欧美精品在线观看 | 日韩精品视频免费在线观看 | 日日夜夜天天久久 | 在线国产视频 | 日日爽天天操 | 91视频免费看网站 | 人人舔人人干 | 日韩99热| 欧美午夜久久 | 亚洲精品一区二区精华 | 国产精品videoxxxx | 91av99| 91精品一 | 久久久久久久久久久免费 | 亚洲黄色三级 | 97超碰免费 | 免费在线h| 玖玖精品在线 | 中文字幕最新精品 | 日韩av一区二区三区在线观看 | 天天综合网入口 | 99视频这里只有 | 精品一区二区视频 | 日韩精品中文字幕在线不卡尤物 | 在线观看理论 | 国产成人高清 | 中文字幕国产在线 | 麻豆视频在线免费观看 | 最近中文字幕免费视频 | 最新极品jizzhd欧美 | 久久69av| 亚洲一级黄色av | av福利在线看 | 日韩免费观看一区二区 | 久久乱码卡一卡2卡三卡四 五月婷婷久 | 国产高清av免费在线观看 | 91女人18片女毛片60分钟 | aav在线 | 99视频黄 | 日韩一区二区在线免费观看 | 国产亚洲精品美女久久 | 亚洲精品视频在线观看免费视频 | 狠狠伊人 | 精品欧美乱码久久久久久 | 精品一区二区免费 | 日本爱爱免费视频 | 欧美日韩国产综合一区二区 | 午夜美女wwww | 久草在线免费播放 | 伊人久操 | 国产午夜精品一区二区三区在线观看 | 欧美激情va永久在线播放 | 欧美日韩亚洲第一页 | 在线最新av| 五月婷婷激情综合 | 99国产一区| 精品亚洲午夜久久久久91 | 五月婷婷操 | 久久免费美女视频 | 国产又粗又猛又爽又黄的视频先 | 91资源在线视频 | 一本一本久久a久久精品综合小说 | 麻豆久久 | 色婷婷九月 | 日韩中文字幕视频在线观看 | 天天草天天色 | 日韩精品在线播放 | 国产精品资源在线 | 日韩av电影免费在线观看 | 99久久精品费精品 | 91av欧美 | 在线三级播放 | 免费a视频在线观看 | 日韩亚洲在线视频 | 国产99在线 | 97超碰超碰久久福利超碰 | 玖玖综合网 | 欧美91视频 | 亚洲专区一二三 | 欧美激情精品久久 | 久久久久久久免费 | 日本中文字幕电影在线免费观看 | 亚洲视频免费在线 | 奇米四色影狠狠爱7777 | 91中文字幕网 | 在线a人v观看视频 | 免费看国产曰批40分钟 | 91免费国产在线观看 | 色视频在线观看免费 | 欧美精品久久久久久 | 久久综合影视 | 精品毛片在线 | 91在线看视频免费 | 亚洲免费视频观看 | 国产高清视频免费 | 亚洲无在线 | 五月激情电影 | 黄色av成人在线 | 有码中文在线 | 不卡av电影在线观看 | 国产3p视频 | 久久高清毛片 | 国产男女免费完整视频 | 99热在线看| 国产免费中文字幕 | 欧美日本一区 | 国产精品久久久久国产精品日日 | 亚洲天堂网视频 | 日本中文字幕电影在线免费观看 | 日韩精选在线 | 成人网页在线免费观看 | 久久成人18免费网站 | 国产成人精品亚洲精品 | 久久久久伦理电影 | 国产又粗又硬又长又爽的视频 | 亚洲精品视频免费观看 | 中文字幕永久在线 | 午夜 在线| 国产小视频免费观看 | 久热电影 | 国产黄色免费观看 | 人人爱在线视频 | 国产精品美女久久久久久久久 | 日韩av中文在线 | 久久色网站 | 国产精品一区二区三区电影 | 国产美女黄网站免费 | 日韩理论在线 | 久久夜靖品 | 中文字幕在线日本 | 亚洲国产精彩中文乱码av | av网站手机在线观看 | 天天操天天操天天操天天操天天操天天操 | 久久香蕉电影网 | 精品国产乱码久久久久久1区二区 | 精品一区二区6 | 国产福利一区在线观看 | 久久色亚洲 | 亚洲人毛片 | 三级黄色在线 | 99热精品国产一区二区在线观看 | 亚洲精品短视频 | 天堂av中文字幕 | 亚洲精品美女久久 | 中文字幕在线免费看线人 | 色综合a| 99精品国产99久久久久久97 | 久久免费精品国产 | 亚洲高清网站 | 中文字幕日韩有码 | 看片黄网站 | 成人午夜剧场在线观看 | 国产无吗一区二区三区在线欢 | 在线看中文字幕 | 激情偷乱人伦小说视频在线观看 | 99精品国产一区二区 | 精品视频一区在线 | 99精品国产在热久久下载 | 色爱区综合激月婷婷 | 激情小说网站亚洲综合网 | 91av在线看| 欧美日韩视频在线 | 久久不卡免费视频 | 日韩电影一区二区在线 | 国产综合在线视频 | 国产在线看一区 | 色停停五月天 | 久久精品视频在线免费观看 | 国产乱码精品一区二区三区介绍 | 九九热有精品 | 99国产精品一区二区 | 亚洲精品视频在线免费播放 | 久久福利综合 | 欧美日韩中文字幕综合视频 | 久久视频国产 | 中文资源在线官网 | 亚洲国产免费网站 | 美女视频久久久 | 99久久99久久精品国产片果冰 | 亚洲欧美日韩国产一区二区三区 | 亚洲国产精品视频在线观看 | 国产精品一区二区三区在线看 | 欧美色噜噜噜 | 欧美激情视频一区 | 91亚洲成人 | 国产流白浆高潮在线观看 | 丁香婷婷在线观看 | 亚洲国产精品成人av | 免费男女羞羞的视频网站中文字幕 | 亚洲国产网址 | 超碰免费公开 | 国产精品综合在线 | 日韩精品视频免费在线观看 | 天天搞天天干 | 亚洲精品在线观 | 久久精品中文字幕 | 丝袜美腿一区 | 成人久久免费 | 国产剧情一区 | 日韩首页 | 国内精品久久久久久久久久清纯 | 五月激情丁香婷婷 | 国产精品99久久久久人中文网介绍 | 免费看高清毛片 | 美女在线黄 | 麻豆视频免费观看 | 日本成址在线观看 | 久插视频 | 日韩免费av片 | 一区二区欧美激情 | 狠狠色狠狠综合久久 | 热久久免费国产视频 | 国产精品久久久久久久久岛 | 日韩毛片在线播放 | 国产午夜视频在线观看 | 亚洲免费av一区二区 | 狠狠ri| 五月天久久 | 人人爱人人爽 | 色香蕉在线视频 | 天天干夜夜爽 | 欧美国产不卡 | 国产亚洲精品综合一区91 | 久久久在线观看 | 国产视频日韩视频欧美视频 | 天天操夜夜干 | 最近高清中文字幕在线国语5 | 久久久久久久久久久久av | 久久成人国产 | 国产精品 9999 | 韩国av在线 | 国产区在线视频 | 日p在线观看 | 欧美日韩国产免费视频 | 97av在线视频 | 九九免费在线看完整版 | www.亚洲在线 | 超碰在线9 | 欧美五月婷婷 | 国产一区二区三区高清播放 | 久艹在线观看视频 | 色婷婷88av视频一二三区 | 三级动态视频在线观看 | 精品国产免费看 | 亚洲黄色免费电影 | 性色在线视频 | 久久久国产一区二区三区四区小说 | 午夜在线免费观看 | 日韩一级精品 | 久久99精品国产91久久来源 | 成年人视频免费在线播放 | 欧美另类老妇 | 成人av免费 | 97**国产露脸精品国产 | 久久久国产精品网站 | 成片视频免费观看 | 黄色影院在线免费观看 | 91精品国产高清自在线观看 | 国产亚洲精品久久 | 欧美在线视频二区 | 国产高清不卡一区二区三区 | 亚洲综合成人婷婷小说 | 最新av网址大全 | 欧美色图30p | 国产精品毛片久久久久久久久久99999999 | 黄色av电影免费观看 | 日韩一片| 久久久久9999亚洲精品 | 九九在线高清精品视频 | 永久中文字幕 | 日日干激情五月 | 天天射色综合 | 国产精品欧美久久久久无广告 | 久草视频看看 | 国产精品亚洲人在线观看 | 欧美一级片免费在线观看 | 激情丁香久久 | 九九视频在线观看视频6 | av看片在线观看 | www.福利视频 | 久久99亚洲精品久久 | 成年在线观看 | 天天在线视频色 | 日av免费 | 在线观看久久久久久 | 久久免费看毛片 | 欧美成人影音 | 在线高清av | 久久精品电影网 | 日韩黄色一区 | 久久艹艹 | 天堂av最新网址 | 伊人色**天天综合婷婷 | 国产第一页在线播放 | 欧美亚洲国产一卡 | 97色婷婷成人综合在线观看 | 国产高清专区 | 手机在线免费av | 99久久综合狠狠综合久久 | 中文字幕影视 | 国产精品大全 | 九九九毛片 | av激情五月 | 国产成人免费观看久久久 | 中文字幕成人一区 | 国产一级高清 | 成片免费观看视频大全 | 制服丝袜成人在线 | 亚洲欧美成人 | 天天天在线综合网 | 国产精品麻豆99久久久久久 | 国产手机免费视频 | 久久99久久99精品免观看软件 | 久久久久一区 | 久久午夜电影网 | 国产高清网站 | 日韩中文字幕a | 欧美日视频| 国产精品网红直播 | 国产黄色一级片 | 欧美极品少妇xbxb性爽爽视频 | 国产视频在线观看免费 | 一区二区三区动漫 | 成人在线网站观看 | 国产裸体bbb视频 | 国产又黄又爽又猛视频日本 | 精品国产精品久久 | 国内精品久久久久影院优 | 九九国产视频 | 91麻豆高清视频 | 日韩av一区二区三区在线观看 | 久久成人高清视频 | 激情欧美日韩一区二区 | 国产综合在线视频 | 亚洲另类xxxx | 亚洲一区二区三区精品在线观看 | 国产在线观看a | 精品一区二区免费视频 | 国产一级在线 | 久久精品aaa| 天天亚洲| 久久成人麻豆午夜电影 | 亚洲精品国产精品国自产 | 久久一区91 | 国产一级在线观看视频 | 久久免费在线观看 | 国产在线2020 | 国产一区二区不卡视频 | 精品久久久影院 | 久久久久女人精品毛片 | 欧美日韩在线观看一区 | av短片在线 | 992tv人人网tv亚洲精品 | 国产精品1000 | 欧美在线a视频 | 九九国产精品视频 | 97天堂网| av一级片网站 | 麻豆精品视频在线观看免费 | 国产精品久久久久久久久大全 | 美女视频是黄的免费观看 | 制服丝袜一区二区 | 久久久高清一区二区三区 | 色中色亚洲| 亚洲成人家庭影院 | 国产另类av | aaawww| 亚洲精品白浆高清久久久久久 | 亚洲日本色| 中文字幕成人在线观看 | 丁香激情网 | 99久久精| 99久久精品久久亚洲精品 | 婷婷国产v亚洲v欧美久久 | 99久久久久久久 | 91在线色 | 日韩小视频网站 | 69精品在线 | 国产黄色精品在线 | 亚洲专区 国产精品 | 欧美日韩一区二区在线观看 | 欧美日韩亚洲国产一区 | 91在线观看视频 | 97在线观看视频免费 | 国产黑丝袜在线 | 久久久精品国产免费观看同学 | 91香蕉视频在线下载 | a在线播放 | 久久99久久99免费视频 | 在线免费观看黄色大片 | 成人影视免费 | 夜夜躁狠狠躁日日躁视频黑人 | 96久久欧美麻豆网站 | 亚洲午夜精品久久久久久久久久久久 | 国产美女被啪进深处喷白浆视频 | 日韩美在线 | 成人免费在线播放 | 欧美亚洲国产一卡 | 婷婷丁香色 | 国产精品久久久久久欧美 | 亚洲精品午夜国产va久久成人 | 一区二区三区国产欧美 | 91在线网址 | 日韩91av | 国产精品18久久久久久久 | 99久久精品一区二区成人 | 久久久96 | 三级性生活视频 | 久久久久久高潮国产精品视 | 青青草国产精品视频 | 麻豆果冻剧传媒在线播放 | 国产亚洲亚洲 | 久久电影国产免费久久电影 | 国产午夜剧场 | 五月开心婷婷 | 久久精品久久久精品美女 | 美女在线观看av | 在线不卡中文字幕播放 | 亚洲日本在线一区 | 午夜成人影视 | 欧美精品在线免费 | 97国产精品久久 | 狠狠色丁婷婷日日 | 婷婷亚洲综合五月天小说 | 久久午夜免费视频 | 久草网站| 亚洲男男gaygay无套 | 在线免费黄 | 国内一级片在线观看 | 69精品| 天天干天天干天天干天天干天天干天天干 | 粉嫩av一区二区三区四区五区 | 超碰在线人 | 日韩视频a| 中文字幕一区在线观看视频 | 中文字幕一区二区在线播放 | 亚洲黄色一级大片 | 99tvdz@gmail.com| 美女精品久久久 | 欧美日韩69 | 亚洲黄色免费观看 | 亚洲高清视频在线播放 | 狠狠操综合 | 亚洲最大av网站 | 欧美黄网站 | 500部大龄熟乱视频 欧美日本三级 | 狠狠操夜夜操 | 在线观看欧美成人 | 亚洲综合激情五月 | 国产精彩视频一区 | 亚洲精品国产精品国自 | 在线观看www. | 天天插天天狠天天透 | 99在线观看 | 亚洲狠狠婷婷综合久久久 | 成人黄色电影在线观看 | 欧美日韩精品在线观看视频 | av一级片网站| 正在播放 国产精品 | 黄色软件在线观看 | 999视频网| 99在线精品视频观看 | 国产美女视频黄a视频免费 久久综合九色欧美综合狠狠 | 精品免费在线视频 | 日韩欧美精品一区 | www.五月婷婷| 最新国产在线观看 | 在线免费观看av网站 | 在线免费观看国产精品 | 婷婷色资源| 96视频免费在线观看 | 欧美精品小视频 | 久久国精品| 日韩大陆欧美高清视频区 | 日本在线观看中文字幕无线观看 | 欧美日韩国产高清视频 | 久久区二区 | 久久麻豆精品 | 九色福利视频 | 免费看污黄网站 | 精品免费在线视频 | av一级一片 | 日本中文字幕电影在线免费观看 | 1000部18岁以下禁看视频 | 精品国产免费人成在线观看 | 在线天堂中文www视软件 | 久久色亚洲 | 日韩欧美在线观看一区二区三区 | 91视频最新网址 | 国产精品av免费在线观看 | 精品国产亚洲一区二区麻豆 | 四虎国产永久在线精品 | 在线观看视频国产一区 | 成人一级在线观看 | 色片网站在线观看 | 欧美日韩视频一区二区三区 | 日本久久久久久科技有限公司 | 亚洲影院天堂 | 亚洲精品国产成人av在线 | 精品久久一区二区三区 | 久久久毛片 | 久久久首页| 波多野结衣最新 | 日韩久久精品一区二区三区下载 | 欧美日韩一区二区三区视频 | 久久久久久久久久亚洲精品 | 在线免费色 | 香蕉久草 | 久久国产高清视频 | 欧美色图亚洲图片 | 久久久鲁 | 天天搞天天干 | 欧美一级黄色片 | 亚洲永久在线 | 久草在线费播放视频 | 激情五月激情综合网 | 欧美午夜久久久 | 欧美成人一二区 | 毛片网在线播放 | 91麻豆精品国产91久久久久 | 日韩成人黄色av | 992tv又爽又黄的免费视频 | 国内一区二区视频 | 日日操天天操夜夜操 | 亚洲一级国产 | 国内综合精品午夜久久资源 | 日韩精品字幕 | 精品久久福利 | 国产在线国偷精品产拍免费yy | 一区二区三区手机在线观看 | 色婷婷色 | 免费在线观看av电影 | 狠狠躁夜夜躁人人爽视频 | 久久香蕉电影 | 日韩电影在线观看一区二区 | 欧美成年黄网站色视频 | 久久久精品高清 | 免费久久视频 | 国产手机视频在线播放 | 在线观看一区 | 国产黄色片久久 | 黄色成人av| 99视频这里有精品 | 99久视频| 一区二区三区在线看 | 国产精品一区二区久久精品爱微奶 | 精品毛片一区二区免费看 | 最新中文在线视频 | 欧洲精品亚洲精品 | 国产在线视频一区 | 在线视频日韩一区 | 91成人精品国产刺激国语对白 | 久久夜夜操 | 96久久久 | 日本中文一区二区 | 国产精品淫片 | 久久精品免费播放 | 精品一区二区精品 | 国产一级视频在线免费观看 | 最近免费观看的电影完整版 | 日韩免费在线视频 | 91污在线 | 国产护士av | 在线观看国产福利片 | 在线免费观看不卡av | 日韩激情视频在线观看 | 国产中文字幕亚洲 | 免费在线国产 | 免费亚洲视频 | 久久久免费毛片 | 国产一级a毛片视频爆浆 | 黄色网中文字幕 | 最新中文字幕在线资源 | 久久九九精品久久 | 97电影在线看视频 | 亚洲精品视频偷拍 | 91精品国产福利在线观看 | 亚洲第一成网站 | 国产成人免费在线观看 | 国产精品三级视频 | 婷婷综合久久 | 色偷偷人人澡久久超碰69 | 久久99在线视频 | 91视频91色| 成人精品一区二区三区中文字幕 | 毛片基地黄久久久久久天堂 | 中文字幕在线观看完整版 | 四虎国产精品免费 | 国产亚洲精品美女 | 精品免费国产一区二区三区四区 | 午夜精品久久久久久久久久久久久久 | 青青河边草手机免费 | 最新av网址大全 | 欧美性大战 | 综合色在线观看 | 日本最新高清不卡中文字幕 | 久久久99精品免费观看app | 在线观看国产亚洲 | 夜夜夜夜猛噜噜噜噜噜初音未来 | 国产成人黄色在线 | 中文字幕在线看片 | 久久综合色天天久久综合图片 | 免费成人短视频 | 精品久久久久久久久久久院品网 | 久久 国产一区 | 久久国产精品视频观看 | 四虎最新入口 | 国产美女在线观看 | 人人干,人人爽 | 国产91影院 | 天天天天色综合 | 久久的色 | 日韩av线观看 | www日韩精品 | 亚洲永久免费av | 中文av日韩| 日韩精品在线免费播放 | 国产精品v欧美精品v日韩 | 99久久超碰中文字幕伊人 | 91麻豆精品国产91久久久久久 | 美女网站久久 | 福利电影一区二区 | 国产日韩三级 | 国产精品高清在线 | 久草热久草视频 | 91在线视频一区 | 午夜av免费 | 欧美日本国产在线观看 | 麻花豆传媒mv在线观看 | 在线91精品 | 日韩久久午夜一级啪啪 | 日韩av免费一区 | 五月婷婷六月丁香在线观看 | 久久激情视频 久久 | 狠狠狠色丁香婷婷综合激情 | 白丝av免费观看 | 91精品国产高清自在线观看 | 精品国产免费看 | 99精品视频一区二区 | 99在线精品免费视频九九视 | 中文字幕日韩国产 | 伊人五月 | 在线中文字幕播放 | 黄色三级免费看 | 日日操网| 亚洲精品在线观看中文字幕 | 亚洲成人精品国产 | 四虎在线免费视频 | 国产一区视频在线 | 国产在线色视频 | 亚洲午夜大片 | 香蕉视频啪啪 | 久久精品在线 | 日本三级香港三级人妇99 | 91成人在线观看高潮 | 一级免费黄色 | japanesefreesex中国少妇 | 成 人 黄 色 免费播放 | 欧美日韩中文国产一区发布 | 精品综合久久久 | 久久久久久蜜桃一区二区 | 亚洲精品tv久久久久久久久久 | 久草免费在线观看 | 999久久久免费精品国产 | 亚洲资源片 | 亚洲成a人片在线观看中文 中文字幕在线视频第一页 狠狠色丁香婷婷综合 | 婷婷六月综合亚洲 | 综合精品在线 | 99久高清在线观看视频99精品热在线观看视频 | 在线观看成人毛片 | 日韩欧美69 | 在线看av网址| 黄色电影网站在线观看 | 激情欧美一区二区三区 | 国产亚州精品视频 | 免费看片网站91 | 欧美一级免费黄色片 | 国产精品每日更新 | 国产高清av在线播放 | 婷婷久久综合九色综合 | 久久免费中文视频 | 亚洲精品免费播放 | 亚洲成av片人久久久 | 国产字幕在线看 | 日本精品一区二区三区在线观看 | 一级国产视频 | 色噜噜狠狠狠狠色综合久不 | av电影 一区二区 | 91激情视频在线观看 | 成人免费一级片 | 成人免费看黄 | 91av中文 | 国产精品高清一区二区三区 | 91亚洲国产成人久久精品网站 | 欧美日韩高清在线观看 | 日韩毛片在线一区二区毛片 | 日韩女同一区二区三区在线观看 | 成人久久久精品国产乱码一区二区 | 国产麻豆精品久久 | 91av观看| 久久久久久高潮国产精品视 | 精品国产aⅴ一区二区三区 在线直播av | 小草av在线播放 | 日韩在线电影观看 | 91精品国产一区二区在线观看 | 青青草国产精品视频 | 日韩久久久久久 | 久久免费视频这里只有精品 | 中文字幕亚洲五码 | 中文字幕 第二区 | 亚州av网站 | 精品99999| 亚洲综合色视频在线观看 | 国产在线观看你懂得 | 97网在线观看 | 国产精品网红直播 | www麻豆视频| 免费观看特级毛片 | 日夜夜精品视频 | 久久视频免费在线观看 | 在线观看av免费观看 | 久99久中文字幕在线 | 天堂中文在线视频 | 天天曰| 免费黄色av电影 | 日韩xxxbbb| 国产99久久久精品视频 | 久久精品久久久久电影 | 国产精品久久久久久久毛片 | 韩国av免费在线 | 九九久久国产 | 欧美性久久久久久 | 亚洲精品日韩在线观看 | 在线观看成人网 | 国产精品福利午夜在线观看 | 久久久久久免费视频 | 97av.com | 久久久男人的天堂 | 99国产情侣在线播放 | 色免费在线| 91成年人网站 | 在线播放日韩av | 又黄又刺激的网站 | 婷色| 日本视频不卡 | 日产乱码一二三区别免费 | 日本午夜在线观看 | 国产精品久久久久婷婷 | 97精品视频在线播放 | 人人爱爱| 亚洲精品中文字幕在线观看 | 午夜三级毛片 | 国产精品二区在线 | 国产美女精品人人做人人爽 | av千婊在线免费观看 | 国产精品一区二区免费在线观看 | 亚洲资源视频 | 免费高清在线视频一区· | 91最新网址在线观看 | 久久精品国产免费看久久精品 | 亚洲精品乱码久久久久久按摩 | 麻豆视频一区二区 | 免费观看日韩av | 六月丁香激情网 | 久久99精品久久久久久秒播蜜臀 | 国产精品久久久久aaaa | 久久国产免费视频 | 国产精品成人av久久 | 98超碰在线观看 | 日日干天天爽 | 亚洲天堂视频在线 | 国产视频手机在线 | 中文字幕久久网 | 久久久久免费网 | 精品视频国产一区 | 日韩国产精品毛片 | 国产高清视频免费最新在线 | 五月开心婷婷网 | 国内综合精品午夜久久资源 | 国产尤物一区二区三区 | www五月婷婷 | h网站免费在线观看 | 精品一区二区三区香蕉蜜桃 | 日本中文字幕在线播放 | 久草在线免费看视频 | 亚洲不卡av一区二区三区 | 国产 在线 日韩 | 中文字幕在线观看完整 | 热久精品| 久久综合久久综合九色 | 国产色视频一区二区三区qq号 | www.天天干.com | 亚洲视屏在线播放 | 色资源中文字幕 | 久久久久久国产精品久久 | 欧美大片在线观看一区 | 久青草影院 | 色先锋资源网 | 看av免费 | 亚洲激情在线 | 久久久久久黄 | 亚洲精品久久久蜜桃直播 | 丁香六月国产 | 色综合小说 | 亚洲h色精品 | 国产视频一区二区三区在线 | av在线播放中文字幕 | 偷拍久久久 | 狠狠综合久久av | 少妇按摩av | 奇米四色影狠狠爱7777 | 国产精品1区2区在线观看 | 亚洲国产成人久久综合 | 免费看片网页 | 97成人在线视频 | 成人午夜电影在线 | 色悠悠久久综合 | 婷婷视频导航 | 99在线高清视频在线播放 | 日韩视频一区二区三区在线播放免费观看 | 免费看的黄色小视频 | 精品国模一区二区 | 国产免费中文字幕 | 色.com| 麻豆视频免费版 | 免费在线国产精品 | 国产亚洲精品久久久网站好莱 | 丝袜足交在线 | 一区二区三区动漫 | 性色在线视频 | 午夜婷婷在线观看 | 麻豆国产精品va在线观看不卡 | 久久夜色网 | 国产在线97| 婷婷免费视频 | 麻豆综合网 | 中文字幕av在线免费 | 少妇性bbb搡bbb爽爽爽欧美 | 中文字幕第| www.婷婷色| 在线播放av网址 | 成人在线观看免费 | 国产成人专区 | 亚洲精品456在线播放 | 亚洲精品中文在线 | 97综合视频 | 日韩中文久久 | 一级黄色大片在线观看 | 日韩精品久久中文字幕 | av观看在线观看 | 亚洲综合成人专区片 | 日韩免费不卡视频 | 五月天伊人网 | 亚洲精品高清在线观看 | 久久视频在线观看 | 在线国产一区二区 | 亚洲精品在线观看的 | 视频在线在亚洲 | 一区二区三区四区久久 | 欧美色综合 | 婷婷看片| 在线看黄网站 | 国产成人一区二区三区电影 | 在线一区二区三区 | 久要激情网 | 日日草天天草 | 国产精品久久久久久一区二区三区 | 国产精品videossex国产高清 | 精品视频一区在线观看 | 国产 在线 高清 精品 | 超碰.com | 国产91免费在线观看 | 亚洲婷婷在线视频 | 精品国产123 | 欧美三人交 | 中文字幕精品一区二区精品 | 日本xxxx裸体xxxx17 | www狠狠操| 久久免费国产精品 | 婷婷色资源 | 一区三区在线欧 | 狠狠干天天操 | 久久人人爽人人 | 国产又黄又爽无遮挡 | 在线观看久久久久久 | 欧美日韩中文字幕在线视频 | 国产91精品一区二区绿帽 | 91精品国产91久久久久久三级 | 黄色毛片网站在线观看 | www欧美色 | 在线观看亚洲国产精品 | 黄色片网站大全 | 亚洲精品在线视频 | 久久久亚洲麻豆日韩精品一区三区 | 综合激情av | 成人欧美日韩国产 | 久久综合狠狠狠色97 | 97操碰 | 免费a v网站 | 久草视频在线免费看 | 久久毛片高清国产 | 欧美一区影院 | 91在线91| 色欲综合视频天天天 | 国产高清视频免费在线观看 | 免费观看9x视频网站在线观看 | 亚洲一区视频免费观看 | 色综合久久久久久久久五月 | 国产精品6| 91精品视频观看 | 波多野结衣一区三区 | 欧美日本不卡高清 | 激情av在线资源 | 特级黄色视频毛片 | 99精品在线视频观看 | 天天干,天天草 | 456成人精品影院 | 一区在线观看 | 亚洲视频在线视频 | 久草精品视频在线观看 | 国产精品美女网站 | 国产婷婷精品 | 午夜精品一区二区三区四区 | 一区二区精品国产 | 91免费网址| 九色精品免费永久在线 | 国产一级不卡毛片 | 九九久|