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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

结合 category 工作原理分析 OC2.0 中的 runtime

發(fā)布時間:2023/12/19 编程问答 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 结合 category 工作原理分析 OC2.0 中的 runtime 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

絕大多數(shù) iOS 開發(fā)者在學(xué)習(xí) runtime 時都閱讀過 runtime.h 文件中的這段代碼:

struct objc_class {Class isa OBJC_ISA_AVAILABILITY;#if !__OBJC2__Class super_class OBJC2_UNAVAILABLE;const char *name OBJC2_UNAVAILABLE;long version OBJC2_UNAVAILABLE;long info OBJC2_UNAVAILABLE;long instance_size OBJC2_UNAVAILABLE;struct objc_ivar_list *ivars OBJC2_UNAVAILABLE;struct objc_method_list **methodLists OBJC2_UNAVAILABLE;struct objc_cache *cache OBJC2_UNAVAILABLE;struct objc_protocol_list *protocols OBJC2_UNAVAILABLE; #endif} OBJC2_UNAVAILABLE;復(fù)制代碼

可以看到其中保存了類的實例變量,方法列表等信息。

不知道有多少讀者思考過 OBJC2_UNAVAILABLE 意味著什么。其實早在 2006 年,蘋果在 WWDC 大會上就發(fā)布了 Objective-C 2.0,其中的改動包括 Max OS X 平臺上的垃圾回收機(jī)制(現(xiàn)已廢棄),runtime 性能優(yōu)化等。

這意味著上述代碼,以及任何帶有 OBJC2_UNAVAILABLE 標(biāo)記的內(nèi)容,都已經(jīng)在 2006 年就永遠(yuǎn)的告別了我們,只停留在歷史的文檔中。

Category 的原理

雖然上述代碼已經(jīng)過時,但仍具備一定的參考意義,比如 methodLists 作為一個二級指針,其中每個元素都是一個數(shù)組,數(shù)組中的每個元素則是一個方法。

接下來就介紹一下 category 的工作原理,在美團(tuán)的技術(shù)博客 深入理解Objective-C:Category 中已經(jīng)有了非常詳細(xì)的解釋,然而可能由于時間問題,其中的不少內(nèi)容已經(jīng)過時,我根據(jù)目前最新的版本(objc-680) 做一些簡單的分析,為了便于閱讀,在不影響代碼邏輯的前提下有可能刪除部分無關(guān)緊要的內(nèi)容。

概述

首先 runtime 依賴于 dyld 動態(tài)加載,在 objc-os.mm 文件中可以找到入口,它的調(diào)用棧簡單整理如下:

void _objc_init(void) └──const char *map_2_images(...)└──const char *map_images_nolock(...)└──void _read_images(header_info **hList, uint32_t hCount)復(fù)制代碼

以上四個方法可以理解為 runtime 的初始化過程,我們暫且不深究。在 _read_images 方法中有如下代碼:

if (cat->classMethods || cat->protocols /* || cat->classProperties */) {addUnattachedCategoryForClass(cat, cls->ISA(), hi);if (cls->ISA()->isRealized()) {remethodizeClass(cls->ISA());} }復(fù)制代碼

根據(jù)注釋可見蘋果曾經(jīng)計劃利用 category 來添加屬性。在 addUnattachedCategoryForClass 方法中會找到當(dāng)前類的所有 category,然后在 remethodizeClass 真正的去做處理。不過到目前為止還沒有接觸到相關(guān)的 category 處理,我們繼續(xù)沿著調(diào)用棧向下走:

void _read_images(header_info **hList, uint32_t hCount) └──static void remethodizeClass(Class cls)└──static void attachCategories(Class cls, category_list *cats, bool flush_caches)復(fù)制代碼

這里的 attachCategories 就是處理 category 的核心所在,不過在閱讀這段代碼之前,我們有必要先熟悉一下相關(guān)的數(shù)據(jù)結(jié)構(gòu)。

Category 相關(guān)的數(shù)據(jù)結(jié)構(gòu)

首先來了解一下一個 Category 是如何存儲的,在 objc-runtime-new.h 中可以看到如下定義,我只列出了其中成員變量:

struct category_t {const char *name;classref_t cls;struct method_list_t *instanceMethods;struct method_list_t *classMethods;struct protocol_list_t *protocols;struct property_list_t *instanceProperties; };復(fù)制代碼

可見一個 category 持有了一個 method_list_t 類型的數(shù)組,method_list_t 又繼承自 entsize_list_tt,這是一種泛型容器:

struct method_list_t : entsize_list_tt<method_t, method_list_t, 0x3> {// 成員變量和方法 };template <typename Element, typename List, uint32_t FlagMask> struct entsize_list_tt {uint32_t entsizeAndFlags;uint32_t count;Element first; };復(fù)制代碼

這里的 entsize_list_tt 可以理解為一個容器,擁有自己的迭代器用于遍歷所有元素。 Element 表示元素類型,List 用于指定容器類型,最后一個參數(shù)為標(biāo)記位。

雖然這段代碼實現(xiàn)比較復(fù)雜,但仍可了解到 method_list_t 是一個存儲 method_t 類型元素的容器。method_t 結(jié)構(gòu)體的定義如下:

struct method_t {SEL name;const char *types;IMP imp; };復(fù)制代碼

最后,我們還有一個結(jié)構(gòu)體 category_list 用來存儲所有的 category,它的定義如下:

struct locstamped_category_list_t {uint32_t count;locstamped_category_t list[0]; }; struct locstamped_category_t {category_t *cat;struct header_info *hi; }; typedef locstamped_category_list_t category_list;復(fù)制代碼

除了標(biāo)記存儲的 category 的數(shù)量外,locstamped_category_list_t 結(jié)構(gòu)體還聲明了一個長度為零的數(shù)組,這其實是 C99 中的一種寫法,允許我們在運(yùn)行期動態(tài)的申請內(nèi)存。

以上就是相關(guān)的數(shù)據(jù)結(jié)構(gòu),只要了解到這個程度就可以繼續(xù)讀源碼了。

處理 Category

對 Category 中方法的解析并不復(fù)雜,首先來看一下 attachCategories 的簡化版代碼:

static void attachCategories(Class cls, category_list *cats, bool flush_caches) {if (!cats) return;bool isMeta = cls->isMetaClass();method_list_t **mlists = (method_list_t **)malloc(cats->count * sizeof(*mlists));// Count backwards through cats to get newest categories firstint mcount = 0;int i = cats->count;while (i--) {auto& entry = cats->list[i];method_list_t *mlist = entry.cat->methodsForMeta(isMeta);if (mlist) {mlists[mcount++] = mlist;}}auto rw = cls->data();prepareMethodLists(cls, mlists, mcount, NO, fromBundle);rw->methods.attachLists(mlists, mcount);free(mlists);if (flush_caches && mcount > 0) flushCaches(cls); }復(fù)制代碼

首先,通過 while 循環(huán),我們遍歷所有的 category,也就是參數(shù) cats 中的 list 屬性。對于每一個 category,得到它的方法列表 mlist 并存入 mlists 中。

換句話說,我們將所有 category 中的方法拼接到了一個大的二維數(shù)組中,數(shù)組的每一個元素都是裝有一個 category 所有方法的容器。這句話比較繞,但你可以把 mlists 理解為文章開頭所說,舊版本的 objc_method_list **methodLists。

在 while 循環(huán)外,我們得到了拼接成的方法,此時需要與類原來的方法合并:

auto rw = cls->data(); rw->methods.attachLists(mlists, mcount);復(fù)制代碼

這兩行代碼讀不懂是必然的,因為在 Objective-C 2.0 時代,對象的內(nèi)存布局已經(jīng)發(fā)生了一些變化。我們需要先了解對象的布局模型才能理解這段代碼。

Objective-C 2.0 對象布局模型

objc_class

相信讀到這里的大部分讀者都學(xué)習(xí)過文章開頭所說的對象布局模型,因此在這一部分,我們采用類比的方法,來看看 Objective-C 2.0 下發(fā)生了哪些改變。

首先,Class 和 id 指針的定義并沒有發(fā)生改變,他們一個指向類對應(yīng)的結(jié)構(gòu)體,一個指向?qū)ο髮?yīng)的結(jié)構(gòu)體:

// objc.h typedef struct objc_class *Class; typedef struct objc_object *id;復(fù)制代碼

比較有意思的一點是,objc_class 結(jié)構(gòu)體是繼承自 objc_object 的:

struct objc_object {Class isa OBJC_ISA_AVAILABILITY; };struct objc_class : objc_object {Class superclass;cache_t cache; // formerly cache pointer and vtableclass_data_bits_t bits; // class_rw_t * plus custom rr/alloc flagsclass_rw_t *data() { return bits.data();} };復(fù)制代碼

這一點也很容易理解,早在 Objective-C 1.0 時代,我們就知道一個對象的結(jié)構(gòu)體只有 isa 指針,指向它所屬的類。而類的結(jié)構(gòu)體也有 isa 指針指向它的元類。因此讓類結(jié)構(gòu)體繼承自對象結(jié)構(gòu)體就很容易理解了。

可見 Objective-C 1.0 的布局模型中,cache 和 super_class 被原封不動的移過來了,而剩下的屬性則似乎消失不見。取而代之的是一個 bits 屬性,以及 data() 方法,這個方法調(diào)用的其實是 bits 屬性的 data() 方法,并返回了一個 class_rw_t 類型的結(jié)構(gòu)體指針。

class_data_bits_t

以下是簡化版 class_data_bits_t 結(jié)構(gòu)體的定義:

struct class_data_bits_t {uintptr_t bits; public:class_rw_t* data() {return (class_rw_t *)(bits & FAST_DATA_MASK);} }復(fù)制代碼

可見這個結(jié)構(gòu)體只有一個 64 位的 bits 成員,存儲了一個指向 class_rw_t 結(jié)構(gòu)體的指針和三個標(biāo)志位。它實際上由三部分組成。首先由于 Mac OS X 只使用 47 位內(nèi)存地址,所以前 17 位空余出來,提供給 retain/release 和 alloc/dealloc 方法使用,做一些優(yōu)化。其次,由于內(nèi)存對齊,指針地址的后三位都是 0,因此可以用來做標(biāo)志位:

// class is a Swift class #define FAST_IS_SWIFT (1UL<<0) // class or superclass has default retain/release/autorelease/retainCount/ // _tryRetain/_isDeallocating/retainWeakReference/allowsWeakReference #define FAST_HAS_DEFAULT_RR (1UL<<1) // class's instances requires raw isa #define FAST_REQUIRES_RAW_ISA (1UL<<2) // data pointer #define FAST_DATA_MASK 0x00007ffffffffff8UL復(fù)制代碼

如果計算一下就會發(fā)現(xiàn),FAST_DATA_MASK 這個 16 進(jìn)制常量的二進(jìn)制表示恰好后三位為0,且長度為47位: 11111111111111111111111111111111111111111111000,我們通過這個掩碼做按位與運(yùn)算即可取出正確的指針地址。

引用 Draveness 在 深入解析 ObjC 中方法的結(jié)構(gòu) 中的圖片做一個總結(jié):

class_rw_t

bits 中包含了一個指向 class_rw_t 結(jié)構(gòu)體的指針,它的定義如下:

struct class_rw_t {uint32_t flags;uint32_t version;const class_ro_t *ro;method_array_t methods;property_array_t properties;protocol_array_t protocols; }復(fù)制代碼

注意到有一個名字很類似的結(jié)構(gòu)體 class_ro_t,這里的 'rw' 和 ro' 分別表示 'readwrite' 和 'readonly'。因為 class_ro_t 存儲了一些由編譯器生成的常量。

These are emitted by the compiler and are part of the ABI.

正是由于 class_ro_t 中的兩個屬性 instanceStart 和 instanceSize 的存在,保證了 Objective-C2.0 的 ABI 穩(wěn)定性。因為即使父類增加方法,子類也可以在運(yùn)行時重新計算 ivar 的偏移量,從而避免重新編譯。

關(guān)于 ABI 穩(wěn)定性的問題,本文不做贅述,讀者可以參考 Non Fragile ivars。

如果閱讀 class_ro_t 結(jié)構(gòu)體的定義就會發(fā)現(xiàn),舊版本實現(xiàn)中類結(jié)構(gòu)體中的大部分成員變量現(xiàn)在都定義在 class_ro_t 和 class_rw_t 這兩個結(jié)構(gòu)體中了。感興趣的讀者可以自行對比,本文不再贅述。

class_rw_t 結(jié)構(gòu)體中還有一個 methods 成員變量,它的類型是 method_array_t,繼承自 list_array_tt。

list_array_tt 是一個泛型結(jié)構(gòu)體,用于存儲一些元數(shù)據(jù),而它實際上是元數(shù)據(jù)的二維數(shù)組:

template <typename Element, typename List>{struct array_t {uint32_t count;List* lists[0];}; } class method_array_t : public list_array_tt<method_t, method_list_t>復(fù)制代碼

其中 Element 表示元數(shù)據(jù)的類型,比如 method_t,而 List 則表示用于存儲元數(shù)據(jù)的一維數(shù)組,比如 method_list_t。

list_array_tt 有三種狀態(tài):

  • 自身為空,可以類比為 [[]]
  • 它只有一個指針,指向一個元數(shù)據(jù)的集合,可以類比為 [[1, 2]]
  • 它有多個指針,指向多個元數(shù)據(jù)的集合,可以類比為 [[1, 2], [3, 4]]
  • 當(dāng)一個類剛創(chuàng)建時,它可能處于狀態(tài) 1 或 2,但如果使用 class_addMethod 或者 category 來添加方法,就會進(jìn)入狀態(tài) 3,而且一旦進(jìn)入狀態(tài) 3 就再也不可能回到其他狀態(tài),即使新增的方法后來又被移除掉。

    方法合并

    掌握了這些 runtime 的基礎(chǔ)只是以后就可以繼續(xù)鉆研剩下的 category 的代碼了:

    auto rw = cls->data(); rw->methods.attachLists(mlists, mcount);復(fù)制代碼

    這是剛剛卡住的地方,現(xiàn)在來看,rw 是一個 class_rw_t 類型的結(jié)構(gòu)體指針。根據(jù) runtime 中的數(shù)據(jù)結(jié)構(gòu),它有一個 methods 結(jié)構(gòu)體成員,并從父類繼承了 attachLists 方法,用來合并 category 中的方法:

    void attachLists(List* const * addedLists, uint32_t addedCount) {if (addedCount == 0) return;uint32_t oldCount = array()->count;uint32_t newCount = oldCount + addedCount;setArray((array_t *)realloc(array(), array_t::byteSize(newCount)));array()->count = newCount;memmove(array()->lists + addedCount, array()->lists, oldCount * sizeof(array()->lists[0]));memcpy(array()->lists, addedLists, addedCount * sizeof(array()->lists[0])); }復(fù)制代碼

    這段代碼很簡單,其實就是先調(diào)用 realloc() 函數(shù)將原來的空間拓展,然后把原來的數(shù)組復(fù)制到后面,最后再把新數(shù)組復(fù)制到前面。

    在實際代碼中,比上面略復(fù)雜一些。因為為了提高性能,蘋果做了一些優(yōu)化,比如當(dāng) List 處于第二種狀態(tài)(只有一個指針,指向一個元數(shù)據(jù)的集合)時,其實并不需要在原地擴(kuò)容空間,而是只要重新申請一塊內(nèi)存,并將最后一個位置留給原來的集合即可。

    這樣只多花費(fèi)了很少的內(nèi)存空間,也就是原來二維數(shù)組占用的內(nèi)存空間,但是 malloc() 的性能優(yōu)勢會更加明顯,這其實是一個空間換時間的權(quán)衡問題。

    需要注意的是,無論執(zhí)行哪種邏輯,參數(shù)列表中的方法都會被添加到二維數(shù)組的前面。而我們簡單的看一下 runtime 在查找方法時的邏輯:

    static method_t *getMethodNoSuper_nolock(Class cls, SEL sel){for (auto mlists = cls->data()->methods.beginLists(), end = cls->data()->methods.endLists(); mlists != end;++mlists) {method_t *m = search_method_list(*mlists, sel);if (m) return m;}return nil; }static method_t *search_method_list(const method_list_t *mlist, SEL sel) {for (auto& meth : *mlist) {if (meth.name == sel) return &meth;} }復(fù)制代碼

    可見搜索的過程是按照從前向后的順序進(jìn)行的,一旦找到了就會停止循環(huán)。因此 category 中定義的同名方法不會替換類中原有的方法,但是對原方法的調(diào)用實際上會調(diào)用 category 中的方法。

    總結(jié)

    讀完本文后,你應(yīng)該對以下內(nèi)容有比較深刻的理解,排名不分先后:

  • 定義在 runtime.h 中的數(shù)據(jù)結(jié)構(gòu),如果有 OBJC2_UNAVAILABLE 標(biāo)記則表示已經(jīng)廢棄。
  • Objective-C 2.0 中,類結(jié)構(gòu)體的結(jié)構(gòu)層次: objc_class -> class_data_bits_t -> class_rw_t -> method_array_t。
  • class_ro_t 結(jié)構(gòu)體的作用,與 class_rw_t 的區(qū)別,以及和 ABI 穩(wěn)定性的關(guān)系。
  • category 解析過程的調(diào)用棧以及基本的流程。
  • method_array_t 為什么要設(shè)計成一種類似于二維數(shù)組的數(shù)據(jù)結(jié)構(gòu),以及它的三種狀態(tài)之間的關(guān)系。
  • 參考資料

  • 深入理解Objective-C:Category
  • 從源代碼看 ObjC 中消息的發(fā)送
  • 深入解析 ObjC 中方法的結(jié)構(gòu)
  • Whats is methodLists attribute of the structure objc_class for?
  • Objc與C(C++)之親緣關(guān)系(一) Class
  • Objective-C Runtime
  • 總結(jié)

    以上是生活随笔為你收集整理的结合 category 工作原理分析 OC2.0 中的 runtime的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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

    久久久久亚洲国产 | 伊甸园av在线 | av天天澡天天爽天天av | 国产精品免费观看国产网曝瓜 | 久久狠狠亚洲综合 | 在线不卡的av | 免费福利在线观看 | 日韩精品视频在线免费观看 | 婷婷综合电影 | 午夜999| 在线免费观看欧美日韩 | 亚洲国内精品视频 | 三级黄在线 | 午夜久久网| 亚洲一区动漫 | 999久久久久久久久6666 | 国产97碰免费视频 | 在线视频区 | 国产精品久久久久久久午夜片 | 亚洲综合欧美日韩狠狠色 | 999久久久久久久久 69av视频在线观看 | 五月天狠狠操 | 欧美日韩精品在线一区二区 | 一区二区三区播放 | 日韩色视频在线观看 | 国产日韩中文字幕 | 久久婷婷国产色一区二区三区 | 99热这里只有精品久久 | 综合久久网 | 亚洲精品2区 | 欧美亚洲国产精品久久高清浪潮 | 精品国产1区2区3区 国产欧美精品在线观看 | 天天射天天 | 欧美日韩综合在线 | 不卡av电影在线观看 | 91传媒免费观看 | 香蕉在线观看视频 | 高清在线观看av | 香蕉视频在线网站 | 欧美性免费 | 精品美女在线视频 | 欧美日韩首页 | 三级黄色大片在线观看 | 午夜电影一区 | 九九激情视频 | 国产高清亚洲 | 国产视频久久久久 | 国产亚洲一区二区三区 | 精品欧美在线视频 | 国产婷婷精品 | 久久综合中文字幕 | 国产一区国产二区在线观看 | 狠狠躁夜夜躁人人爽超碰97香蕉 | 91 在线视频播放 | 人人射网站 | 一级免费黄色 | 久操视频在线观看 | 一区二区三区日韩在线观看 | 亚洲免费小视频 | www.com久久| 成人一区电影 | 国产精品免费av | 国产小视频免费在线观看 | 久久精品日产第一区二区三区乱码 | 中文在线最新版天堂 | 中文字幕在线观看视频免费 | 久久久久 免费视频 | 丁香 婷婷 激情 | 国产福利在线免费 | 国产日本亚洲高清 | 天天天天射 | 国产成人精品国内自产拍免费看 | 国产成年免费视频 | 国产精品成人一区二区三区吃奶 | 91大神精品视频 | 亚洲精品美女久久久 | 亚洲欧美乱综合图片区小说区 | 日韩毛片在线一区二区毛片 | 免费看黄20分钟 | 欧美性色综合网站 | 久草在线这里只有精品 | 亚洲高清网站 | 成年人在线视频观看 | 欧洲一区二区在线观看 | 欧美激情综合五月 | 美女免费视频观看网站 | 成人a级黄色片 | 美女视频黄在线 | 丰满少妇久久久 | 欧美日本一区 | 久久夜夜爽 | 日韩av在线网站 | 一区二区中文字幕在线观看 | 国产一区二区久久久久 | 啪啪资源 | 五月婷婷网站 | 在线国产激情视频 | 看污网站| 玖玖视频在线 | 久久成电影 | 日本精品中文字幕 | 草久久久久久久 | 777久久久 | 国产打女人屁股调教97 | 毛片永久免费 | 欧美一级电影片 | 亚洲精品乱码久久久久久蜜桃91 | 黄色一级免费网站 | 亚洲欧洲日韩 | 国内久久视频 | 欧美一区成人 | 久久全国免费视频 | 亚洲视频,欧洲视频 | 日韩有码在线播放 | 99久久精品免费看国产一区二区三区 | 91免费网站在线观看 | 亚洲精品中文字幕视频 | 日韩一级黄色片 | 欧美激情综合五月色丁香 | 麻豆国产视频下载 | av东方在线| 在线观看第一页 | 在线观看中文字幕一区二区 | 久草精品视频在线播放 | 国产精品美女久久久免费 | 午夜精品一区二区三区在线播放 | 天天色天天综合 | www.久久久.com | 日本在线观看中文字幕无线观看 | 亚洲视频综合在线 | 国产免费三级在线观看 | 天天射网站 | 欧美色图视频一区 | 日韩中文字幕免费视频 | 久久在线视频在线 | 久久综合九色综合久久久精品综合 | 波多野结衣久久精品 | 久久久精品国产免费观看一区二区 | 玖玖在线视频观看 | 97在线播放视频 | 9在线观看免费高清完整版在线观看明 | 成人四虎影院 | 久久精品高清视频 | 三级大片网站 | 国产日韩精品久久 | 啪一啪在线 | 国产亚洲精品中文字幕 | 久久精久久精 | 成人小视频在线播放 | a天堂在线看 | 91精品天码美女少妇 | 91大神免费视频 | 久久久久在线视频 | 天天草av| 久久草在线视频国产 | 成人a视频 | 日产乱码一二三区别在线 | 久久久久久久久久电影 | 亚洲精品乱码久久久久久写真 | 久久亚洲欧美日韩精品专区 | 日韩成人精品一区二区三区 | 超碰在线观看av.com | 免费看的国产视频网站 | 在线视频黄| 欧美久久久久久久久久久 | 亚洲精品视频第一页 | 国产精品24小时在线观看 | www.夜夜操 | 欧美精品免费在线观看 | 久久久久久欧美二区电影网 | 日p在线观看 | 国产99中文字幕 | 中文字幕黄色 | 亚洲久草网 | 亚洲成人资源在线观看 | 国产成人三级三级三级97 | 免费看黄视频 | 午夜精品福利一区二区 | 国产 av 日韩 | wwwwww国产 | 亚洲尺码电影av久久 | 亚洲四虎影院 | 国产手机视频 | 国产无套一区二区三区久久 | 可以免费看av | 国产精品久久久久久妇 | 久久综合狠狠综合 | 一区二区三区四区久久 | 国产成人av综合色 | 日韩和的一区二在线 | 91精品久久久久久久99蜜桃 | 亚洲国产精品久久久久 | 精品国产免费人成在线观看 | 久草爱视频| 91免费在线看片 | 亚洲午夜精品在线观看 | 国产精品久久久久久久久久久久午夜片 | 久久这里只有精品久久 | 久久国产精品久久精品国产演员表 | 久久福利精品 | 99免费精品 | 黄色软件在线看 | 成人黄色片免费 | 欧美日韩在线视频观看 | 亚洲 在线 | www.夜夜骑.com | 99久久久成人国产精品 | 日本三级国产 | 夜夜操天天 | 久久国产精品免费一区二区三区 | 久久精品欧美视频 | 亚洲天堂精品视频 | 精品国产一区二区三区四区在线观看 | 久久久三级视频 | 97人人模人人爽人人喊中文字 | 狠狠干夜夜爱 | 日日干天天插 | 成人羞羞视频在线观看免费 | 日韩黄在线观看 | 精品成人免费 | 国产日本亚洲高清 | 九色琪琪久久综合网天天 | 叶爱av在线 | 国产又粗又长的视频 | 国产一区二区高清不卡 | 国产日产精品一区二区三区四区的观看方式 | 蜜臀av性久久久久蜜臀aⅴ涩爱 | av免费看网站| 日韩av综合网站 | 99久久激情 | 国产一级视频在线观看 | 国产大片免费久久 | 成人av免费在线看 | 亚洲情感电影大片 | 国产精品毛片久久久久久 | 久久综合九色欧美综合狠狠 | 91成人区| www色,com | 免费看的黄网站软件 | 国产夫妻av在线 | 麻豆视频一区二区 | 久久大片网站 | 91丨九色丨首页 | 日韩女同av| 99精品视频网站 | 国产69熟| 日韩艹 | 国产一区91| 天天艹| 深爱婷婷久久综合 | 91麻豆免费版 | 国产精品久免费的黄网站 | 麻豆国产露脸在线观看 | 日韩av在线不卡 | 国产高清日韩欧美 | 日日激情 | 色爱区综合激月婷婷 | 亚洲国产午夜精品 | 亚洲国产精品va在线看黑人动漫 | 国产精品免费观看国产网曝瓜 | 91一区二区三区在线观看 | 国产涩图 | 成人动态视频 | 久久综合视频网 | 免费进去里的视频 | 日韩在观看线 | 欧美射射射 | 亚洲综合激情小说 | 亚洲涩涩色 | 免费观看十分钟 | 午夜久久久久久久久 | 欧美精品做受xxx性少妇 | a天堂一码二码专区 | 97伊人网| 国产精品视频专区 | 日韩欧美视频在线播放 | 久久免费大片 | 激情大尺度视频 | 在线观看免费一级片 | 国产麻豆精品传媒av国产下载 | 久久中国精品 | 欧美精品二 | 啪啪免费视频网站 | 在线播放91 | 国产手机视频精品 | 免费毛片一区二区三区久久久 | 亚洲综合小说 | 国产高清在线免费观看 | 欧美精品久久久久久久久老牛影院 | 欧美日韩国产三级 | 国产日产av | 亚洲视频1 | 免费av网址在线观看 | 国产精品一区二区果冻传媒 | 欧美特一级片 | 在线观看亚洲精品 | 国产丝袜一区二区三区 | 韩日视频在线 | 成人国产在线 | 激情偷乱人伦小说视频在线观看 | 国产高清视频免费最新在线 | 免费男女羞羞的视频网站中文字幕 | 免费a视频在线 | 中文字幕丝袜一区二区 | 国产精品一区二区三区电影 | 国产在线一区二区三区播放 | 人人爽人人澡人人添人人人人 | 青青久草在线视频 | 国产精品大全 | 在线91观看| 日本久久久亚洲精品 | 深夜福利视频一区二区 | a午夜在线 | 亚洲资源一区 | 色午夜| 韩国精品在线观看 | 操操操日日 | 中午字幕在线观看 | 91九色在线观看视频 | 成人黄视频| 亚洲资源网 | 亚洲欧美国产精品va在线观看 | 天天干天天干天天色 | 青草草在线 | 欧美成天堂网地址 | 婷婷六月激情 | av电影在线观看完整版一区二区 | 国产三级国产精品国产专区50 | 99久久er热在这里只有精品66 | 一区二区三区视频在线 | 黄色片免费看 | 成人在线播放网站 | 国产91全国探花系列在线播放 | 五月开心六月婷婷 | 99精品欧美一区二区 | 91精品国产一区 | 色婷婷视频 | 天天综合色天天综合 | 国产成人高清 | 伊人春色电影网 | 亚洲精品xxx | 欧美一级性生活视频 | 亚洲专区欧美专区 | 日韩欧美高清在线 | av片免费播放 | 日韩免费av在线 | 天天操天天操天天 | 日韩一区二区三区视频在线 | 91c网站色版视频 | 久久字幕精品一区 | 中文字幕一区在线观看视频 | 久久男人中文字幕资源站 | 日韩精品在线观看视频 | 免费色网 | 玖玖精品在线 | 欧美a级片免费看 | 999久久| 人交video另类hd| 久久日韩精品 | 亚洲一区精品二人人爽久久 | 日精品在线观看 | 久久精品99久久 | 97超碰中文 | 国产精品九九久久99视频 | 91丨九色丨蝌蚪丰满 | 天天天天天天天操 | 99爱视频 | 在线你懂 | 毛片基地黄久久久久久天堂 | 国产精品免费在线播放 | 五月激情天 | 天天干天天操天天搞 | www激情久久 | 五月婷婷免费 | 99精品视频网站 | 国产一区二区三区视频在线 | 夜夜爽www| 久久免费高清 | 国产欧美高清 | 免费看日韩 | 国产精品视频99 | 亚洲理论在线观看电影 | 国产日韩欧美精品在线观看 | 狠狠操操 | 亚洲一级电影视频 | 成人在线视频免费 | 久久久受www免费人成 | 蜜桃视频成人在线观看 | 亚洲另类在线视频 | 婷婷综合成人 | 91入口在线观看 | 日韩网站免费观看 | 丝袜一区在线 | 亚洲成人黄色在线 | 日韩成人不卡 | 亚洲最新精品 | 国产精品女同一区二区三区久久夜 | 人人看人人爱 | 免费日韩在线 | 日韩免费在线视频观看 | 中文字幕久久精品一区 | 国产91精品一区二区麻豆网站 | 国产日韩欧美在线一区 | 婷婷色网视频在线播放 | 日韩毛片久久久 | 免费看网站在线 | 国产91探花| 蜜臀av性久久久久蜜臀aⅴ流畅 | 久久久99精品免费观看app | 91成人小视频 | 中文日韩在线视频 | 亚洲电影网站 | 日韩剧 | 国产免费观看高清完整版 | 久久在线免费观看 | 在线观看亚洲a | 毛片激情永久免费 | 久草资源免费 | 欧美天天干 | 在线免费视频a | 夜夜看av| 欧美日韩久久 | 国产 日韩 中文字幕 | 日韩精品欧美专区 | 免费看黄的视频 | 中文字幕在线视频一区二区 | 久久国产精品视频免费看 | www久久九| 亚洲视频观看 | 日韩av男人的天堂 | 免费视频一区 | 国产一区二区三区免费视频 | 又湿又紧又大又爽a视频国产 | 欧美精品国产精品 | 国产精品毛片网 | 成人久久18免费 | 亚洲二区精品 | 国产黄在线播放 | 啪啪肉肉污av国网站 | 天天做日日做天天爽视频免费 | av在线播放不卡 | 久久久久免费网 | 一级做a爱片性色毛片www | 一区二区三区日韩在线观看 | 中文字幕在线免费观看 | 久久国产精品久久w女人spa | 国产一级一片免费播放放a 一区二区三区国产欧美 | 在线观看日本韩国电影 | 91精品麻豆| 日韩欧美亚洲 | 天天干天天射天天操 | 人人爽人人爽人人片 | 欧美xxxxx在线视频 | 日本大片免费观看在线 | 一级黄色免费 | 国产在线精品一区二区三区 | 97超碰国产在线 | 黄色片网站大全 | 国产成人三级在线播放 | 亚洲清纯国产 | 亚洲高清在线视频 | 91麻豆精品国产自产在线游戏 | 91视频亚洲 | 国产精品三级视频 | 九九精品视频在线观看 | 91超碰在线播放 | 午夜精品久久久久久久久久久久 | 91视频三区 | 成人免费视频网站在线观看 | 久久精品视频在线播放 | 在线免费黄色av | 亚洲精品久久久久中文字幕m男 | 久久国产乱 | 免费视频三区 | 日本激情视频中文字幕 | 久久电影国产免费久久电影 | 91.麻豆视频 | 一本一道久久a久久综合蜜桃 | 天堂在线v | 欧美大片在线观看一区 | 午夜精品一区二区国产 | 久久99久久99久久 | 97视频人人 | 久草在线免 | 中文字幕在线观看视频一区 | 免费在线一区二区 | 欧美另类xxxxx | 国产福利一区二区三区在线观看 | www.com在线观看 | 亚洲国产合集 | 999热视频 | 91毛片在线| 午夜手机电影 | 91大神免费视频 | 三级黄色免费 | 日日夜夜91 | 欧美成人亚洲 | 欧美性大胆 | 日日日操操 | 91成人在线网站 | 久久久91精品国产一区二区精品 | 欧美精品一区在线 | 99精品视频免费 | 亚洲女同ⅹxx女同tv | 天天插天天操天天干 | 激情网第四色 | 日日夜夜狠狠操 | 国产成人精品一区二区三区福利 | 又色又爽又激情的59视频 | 成年人在线免费看视频 | 欧美人人爱 | 揉bbb玩bbb少妇bbb | 亚洲精品综合一二三区在线观看 | 日韩午夜电影院 | 免费福利在线 | 97色免费视频 | 手机成人在线 | 我要色综合天天 | 五月婷婷六月丁香 | 美女网站色免费 | 93久久精品日日躁夜夜躁欧美 | 国产在线看| 中国黄色一级大片 | 精品久久久久久一区二区里番 | 在线观看中文字幕 | 久久久综合九色合综国产精品 | 国产成人在线综合 | 日日精品 | 国产黄色精品在线 | 成人黄色大片在线观看 | 国产视频一区精品 | av高清在线 | 免费91在线| 国产免费一区二区三区网站免费 | 日日夜夜人人精品 | 国产小视频在线观看免费 | 伊香蕉大综综综合久久啪 | 在线精品视频免费播放 | 国产视频网站在线观看 | 欧美精品久久久久久久久老牛影院 | 在线观看91av| 4p变态网欧美系列 | 久久精品1区 | 国产69精品久久99的直播节目 | 五月天婷婷综合 | 高清av网 | 亚洲aⅴ在线| 中文字幕一区二区三区精华液 | 在线视频日韩一区 | 91丨九色丨国产在线观看 | 亚洲精品视 | 综合久久精品 | 97成人在线免费视频 | 国语麻豆 | 在线免费观看不卡av | av免费黄色 | 免费久久精品视频 | 国产一区二区久久精品 | 久久桃花网 | 国产精品尤物视频 | 国产在线高清视频 | 亚洲色图美腿丝袜 | 久久999久久 | 麻豆一精品传二传媒短视频 | 色婷婷狠狠五月综合天色拍 | 国产精品综合在线观看 | 国产99中文字幕 | 国产一区二区综合 | 欧美日韩国产精品一区二区亚洲 | 国产日韩视频在线观看 | 免费观看久久 | 天天综合导航 | 国产精品视频不卡 | 97韩国电影| 在线一区av| 成人手机在线视频 | 久久婷婷国产 | 久久影院午夜论 | 日韩精品在线一区 | 在线成人av| 伊人永久| 91精品国产欧美一区二区成人 | 91成人在线观看喷潮 | 精品在线一区二区三区 | 亚洲天堂网视频在线观看 | 成人网444ppp | 精品久久网站 | 日日射天天射 | 亚色视频在线观看 | 免费麻豆 | 久久99亚洲网美利坚合众国 | 亚洲一级电影在线观看 | 97国产在线视频 | 在线视频精品播放 | 亚洲情影院 | 中文字幕免费高清在线 | 一区二区伦理 | 九九热只有精品 | 91av电影在线观看 | 日本精品视频网站 | 久久99深爱久久99精品 | av久久在线 | 国产一区二区三区免费在线观看 | 久久精品成人欧美大片古装 | 人人澡人人添人人爽一区二区 | 91精品综合在线观看 | 日韩av一区二区三区在线观看 | 亚洲精品中文在线观看 | 俺要去色综合狠狠 | 日韩免费电影 | 成人国产精品一区二区 | 在线免费看片 | 午夜性盈盈 | 色橹橹欧美在线观看视频高清 | 349k.cc看片app| 91九色蝌蚪在线 | 香蕉久草 | 国产一区在线观看免费 | 91在线网址| 久久久久久久福利 | 亚洲精品综合欧美二区变态 | 网站在线观看你们懂的 | 99999精品视频 | 精品免费视频 | 国产一级二级av | 国产区精品在线观看 | 国产在线播放一区二区 | 日韩欧美一区二区在线 | 91污污视频在线观看 | 夜夜视频资源 | 我爱av激情网 | 高清视频一区二区三区 | 综合天天网 | 98超碰人人 | 亚洲国产精品一区二区久久hs | 亚洲动漫在线观看 | 日韩成人精品一区二区三区 | 97电影在线观看 | 免费观看一级一片 | 日本久久久久久久久久久 | 欧洲不卡av| 蜜桃视频日本 | 亚洲 中文 在线 精品 | 激情视频一区二区三区 | 成人免费在线视频 | av资源免费观看 | 国产91精品一区二区麻豆亚洲 | 天堂中文在线视频 | 国内小视频在线观看 | 国产精品美女久久久久久 | 免费观看视频的网站 | 亚洲电影图片小说 | 99精品欧美一区二区三区 | 久久66热这里只有精品 | 麻豆免费视频网站 | 久久天堂网站 | 久久久久中文 | 97超在线 | 欧美日韩精品国产 | japanese黑人亚洲人4k | 91片在线观看 | 成人欧美一区二区三区在线观看 | av成人在线看 | 最近高清中文在线字幕在线观看 | 超碰久热 | 在线综合 亚洲 欧美在线视频 | 免费韩国av| 成人午夜电影免费在线观看 | 最新中文字幕在线资源 | 午夜骚影 | www.伊人网 | 成人免费观看视频网站 | 深爱激情婷婷网 | 国产精品国产自产拍高清av | 国产99久久 | 婷婷亚洲五月色综合 | 日韩一二三 | 国产 在线 高清 精品 | 久久麻豆视频 | 国产v在线播放 | 久久99久久99精品免观看粉嫩 | 一区二区三区精品在线视频 | 成人中文字幕+乱码+中文字幕 | 欧美精品一区二区在线播放 | 中文在线√天堂 | 亚洲精品乱码白浆高清久久久久久 | 久久久夜色 | 色多多视频在线观看 | 一区二区三区电影 | 日本高清dvd| 中文字幕乱在线伦视频中文字幕乱码在线 | 日本午夜免费福利视频 | 狠狠干.com | 日本久久久影视 | 精品乱码一区二区三四区 | 国产精品丝袜 | 国产日韩中文字幕在线 | 一区二区三区 亚洲 | 夜夜躁狠狠燥 | 国产黄免费在线观看 | 国内免费的中文字幕 | 麻豆高清免费国产一区 | 五月婷婷av在线 | 国产免费中文字幕 | 网站免费黄色 | 最新色视频 | 国产精品18久久久久久vr | 天天色天天操综合网 | 欧美成人视 | 激情五月婷婷丁香 | 丁香花在线视频观看免费 | 国产黄色av | 久久艹国产视频 | 久久草草热国产精品直播 | 日本精品一区二区三区在线播放视频 | 婷婷六月在线 | 久草久| 久久久国产精品人人片99精片欧美一 | 午夜国产福利在线 | 在线观看视频亚洲 | 国产99视频在线观看 | 亚洲精品乱码久久久久久久久久 | 18岁免费看片 | 四虎在线免费观看视频 | 最新av电影网站 | 麻豆va一区二区三区久久浪 | 91看片在线播放 | 在线 国产一区 | 久久99精品波多结衣一区 | 日韩精品一区二区在线视频 | 日韩av电影免费在线观看 | 精品国产一区二区三区噜噜噜 | 狠狠操狠狠干天天操 | 欧美激情综合五月色丁香 | 一区在线电影 | 欧美日韩后 | 免费在线一区二区 | 国产拍揄自揄精品视频麻豆 | zzijzzij日本成熟少妇 | 精品久久精品久久 | av亚洲产国偷v产偷v自拍小说 | 久久精品欧美一区二区三区麻豆 | 国产精品一区二区在线免费观看 | 成 人 黄 色 视频 免费观看 | 午夜精品久久久久久久久久久久久久 | 久久国产精品99国产精 | 天天干天天草天天爽 | 久久视频免费 | www.xxx.性狂虐 | 美女网站视频免费黄 | 亚洲四虎在线 | 久艹视频在线免费观看 | 91热视频在线观看 | 中日韩男男gay无套 日韩精品一区二区三区高清免费 | 亚洲综合五月天 | 香蕉久草 | 黄免费网站 | 香蕉视频18| 国产第一二区 | 成人精品福利 | 玖玖玖影院 | 高清av影院 | 久久免费播放 | 久久y | 久久精品久久久精品美女 | 高潮久久久 | 91av网站在线观看 | 中文字幕免费一区 | www亚洲视频 | 久久新视频 | 国产精品一区二区电影 | 一级黄视频 | 免费下载高清毛片 | 玖玖在线播放 | 亚洲成人第一区 | 久久深爱网 | 欧美日韩精品国产 | 国产黄色片网站 | 91中文在线观看 | 国产亚州av | 日本黄区免费视频观看 | 97色在线观看 | 97成人在线观看视频 | 手机在线视频福利 | 在线中文字幕一区二区 | 亚洲理论片 | 国产成人久久久久 | 日本中文字幕网址 | 亚洲国产人午在线一二区 | 在线免费观看亚洲视频 | 国产一区视频在线 | 国产麻豆精品传媒av国产下载 | 国产二区视频在线观看 | 欧美日韩成人 | 精品亚洲在线 | 黄色aaa毛片| 我要看黄色一级片 | a久久免费视频 | 在线观看韩国av | 国产成人区 | 久久99久久久久 | 久久精品老司机 | 久操97 | 激情黄色一级片 | 日本久久不卡视频 | 一级片免费视频 | 国产一卡在线 | 午夜视频黄 | 欧美另类视频 | 日韩av网页 | 天天操天天干天天操天天干 | 日日干天天插 | 国产精品一区二区在线观看免费 | 亚洲精品永久免费视频 | 天天想夜夜操 | 在线看v片成人 | 91看片在线看片 | 亚洲一区二区三区在线看 | 日韩区在线观看 | 国产成人久久 | 国产爽妇网 | 天天透天天插 | 在线一二三四区 | 国产一区二区在线免费观看 | 玖玖综合网 | 在线激情影院一区 | 在线观看视频色 | av激情五月 | 天天爽夜夜爽精品视频婷婷 | 在线免费国产 | 91最新网址在线观看 | 99久久99久久 | 国产精品一区二区美女视频免费看 | 成年人在线播放视频 | 91资源在线观看 | 91高清视频| 91亚洲精品乱码久久久久久蜜桃 | 成年人免费电影 | 国产精品久久一区二区无卡 | 免费www视频 | 成人亚洲网 | 99视频精品免费观看, | 国产精品国产自产拍高清av | 日韩在线视频二区 | 天天操月月操 | 91九色国产视频 | 成人在线黄色 | 色福利网站| 丁香五月亚洲综合在线 | 精品少妇一区二区三区在线 | 欧美 日韩 成人 | 久久国产精品99久久久久久丝袜 | 亚洲波多野结衣 | 亚洲女人av | 国产免费小视频 | 中文字幕刺激在线 | 色噜噜日韩精品欧美一区二区 | 91在线成人 | 开心激情久久 | 久久成人一区二区 | 九九影视理伦片 | 日韩久久视频 | 天天爽天天爽夜夜爽 | 中文字幕一区二区三区四区 | 日本久久影视 | 99高清视频有精品视频 | 99欧美| 999国内精品永久免费视频 | 日韩精品免费一区二区在线观看 | 探花视频在线观看免费 | 久久黄网站 | 国产精品理论片在线播放 | 亚洲成人午夜在线 | 免费av网站在线看 | 中文字幕免费高清 | 日日操日日操 | 天天爱天天操天天射 | 操操操夜夜操 | 天天操网址 | 免费网站看av片 | 亚洲精品ww| 国产麻豆精品一区 | 成人一级片视频 | 国产伦理久久精品久久久久_ | 97色噜噜 | 国内精品久久久久久 | 色九九视频 | 亚洲精品视频在线观看免费视频 | 欧美日韩在线视频免费 | 亚洲成人黄色在线 | 四虎影视成人 | 亚洲国产wwwccc36天堂 | 国产激情久久久 | 色av男人的天堂免费在线 | 精品一区二区亚洲 | 中文字幕黄色网址 | 激情婷婷综合 | 欧美坐爱视频 | 久久精品亚洲国产 | 国产精品96久久久久久吹潮 | 在线亚州 | 欧美久久久久久久久久 | 国产人成精品一区二区三 | 丁香激情五月婷婷 | 亚洲黄a| 久久久久免费观看 | 免费看三级网站 | 久久久久久激情 | 特级黄色视频毛片 | 国产亚洲字幕 | a视频在线观看免费 | 国产精品免费一区二区 | 久草99| 丁香花在线观看免费完整版视频 | 亚洲一二三在线 | 久久国产精品二国产精品中国洋人 | 在线免费视频a | 97国产一区| 国产亚洲视频中文字幕视频 | 国产尤物一区二区三区 | 成人黄色片免费 | 天天躁日日躁狠狠躁av中文 | 免费在线黄色av | 欧美性黄网官网 | 成人一区二区在线观看 | 日韩精品一区在线播放 | 久久伊人八月婷婷综合激情 | 久久久久黄 | 国产精品久久久久久久久久免费 | 亚洲欧美婷婷六月色综合 | 亚洲精品乱码久久久久久蜜桃91 | 国产精品自产拍 | 亚洲免费a| 中文字幕成人在线 | 国产区高清在线 | 狠狠操狠狠| 国产 日韩 欧美 在线 | 国产精品ssss在线亚洲 | 久久九九影视网 | 亚洲 欧美变态 另类 综合 | 中文字幕在线观看视频网站 | 精品人人爽 | 99在线国产| 亚洲国产精品人久久电影 | 久久国产精品小视频 | 日韩高清免费无专码区 | 日韩欧美高清一区二区 | 久久精品一区二区三区视频 | 99精品视频在线 | 日本亚洲国产 | 中文字幕亚洲欧美日韩 | 综合久久久久久久久 | 麻豆免费在线视频 | 久久国产精品一区二区三区四区 | 日女人电影| 天天操夜夜叫 | 69av在线播放 | 中文字幕精品一区 | 99久久婷婷国产 | 国产中文字幕视频在线观看 | 欧美日韩裸体免费视频 | 日韩高清不卡在线 | 日韩大片在线观看 | www.黄色小说.com| 狠狠干激情 | 国产特级毛片aaaaaa高清 | 欧美九九九 | 九九热免费精品视频 | 中文字幕视频网站 | 在线播放av网址 | aaa日本高清在线播放免费观看 | 亚洲三区在线 | 国产精品视频永久免费播放 | 国产高清视频在线免费观看 | 亚洲精品18日本一区app | 欧美在线一级片 | 国产美女被啪进深处喷白浆视频 | 天天干天天射天天爽 | 欧美福利精品 | 美国人与动物xxxx | 国产精品视频免费 | 亚洲欧美日韩国产一区二区三区 | 久久r精品 | 精品国产一区二区三区av性色 | 伊人久久婷婷 | 东方av在| 久久久久久久久久久久亚洲 | 国产欧美在线一区 | 欧美日韩亚洲精品在线 | 99久久99久久精品 | 亚洲毛片久久 | 九九视频在线观看视频6 | 天天操天天干天天摸 | www.五月天色| 一区二区中文字幕在线播放 | av品善网 | 精品亚洲va在线va天堂资源站 | 国产精品麻豆视频 |