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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

浅谈OC中Block的本质

發布時間:2024/1/18 编程问答 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 浅谈OC中Block的本质 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Block簡介

  • block是將函數及其執行上下文封裝起來的一個對象
  • 在block實現的內部,有很多變量,因為block也是一個對象
  • 其中包含了諸如isa指針,imp指針等對象變量,還有儲存其截獲變量的對象等
  • 原文博客地址: 淺談OC中Block的本質

定義和使用

block根據有無參數和有無返回值有以下幾種簡單使用方式

// 無參數無返回值 void (^ BlockOne)(void) = ^(void){NSLog(@"無參數,無返回值"); }; BlockOne();//block的調用// 有參數無返回值 void (^BlockTwo)(int a) = ^(int a){NSLog(@"有參數,無返回值, 參數 = %d,",a); }; BlockTwo(100);// 有參數有返回值 int (^BlockThree)(int,int) = ^(int a,int b){ NSLog(@"有參數,有返回值");return a + b; }; BlockThree(1, 5);// 無參數有返回值 int(^BlockFour)(void) = ^{NSLog(@"無參數,有返回值");return 100; }; BlockFour();

可是以上四種block底層又是如何實現的呢? 其本質到底如何? 接下來我們一起探討一下

Block的本質

  • 為了方便我們這里新建一個Command Line Tool項目, 在main函數中執行上述中一個block
  • 探索Block的本質, 就要查看其源碼, 這里我們使用下面命令把main.m文件生成與其對應的c++代碼文件
  • 在main.m文件所在的目錄下, 執行如下命令, 會生成一個main.cpp文件
  • 把main.cpp文件添加到項目中, 并使其不參與項目的編譯, 下面我們就具體看一下block的底層到底是如何實現的
xcrun -sdk iphoneos clang -arch arm64 -rewrite-objc main.m

打開main.cpp文件, 找到文件最底部, 可以看到block的相關源碼如下

// block的結構體 struct __main_block_impl_0 {// 結構體的成員變量struct __block_impl impl;struct __main_block_desc_0* Desc;// 構造函數__main_block_impl_0(void *fp, struct __main_block_desc_0 *desc, int flags=0) {impl.isa = &_NSConcreteStackBlock;impl.Flags = flags;impl.FuncPtr = fp;Desc = desc;} };// 封裝了block執行邏輯的函數 static void __main_block_func_0(struct __main_block_impl_0 *__cself) {NSLog((NSString *)&__NSConstantStringImpl__var_folders_ty_804897ld2zg4pfcgx2p4wqh80000gn_T_main_11c959_mi_0);}static struct __main_block_desc_0 {size_t reserved;size_t Block_size; } __main_block_desc_0_DATA = { 0, sizeof(struct __main_block_impl_0)}; int main(int argc, const char * argv[]) {/* @autoreleasepool */ { __AtAutoreleasePool __autoreleasepool; // 定義block變量void (* BlockOne)(void) = ((void (*)())&__main_block_impl_0((void *)__main_block_func_0, &__main_block_desc_0_DATA));// 執行block內部的源碼((void (*)(__block_impl *))((__block_impl *)BlockOne)->FuncPtr)((__block_impl *)BlockOne);}return 0; } static struct IMAGE_INFO { unsigned version; unsigned flag; } _OBJC_IMAGE_INFO = { 0, 2 };

其中block的聲明和調用的對應關系如下

刪除其中的強制轉換的相關代碼后

// 定義block變量 void (* BlockOne)(void) = &__main_block_impl_0((void *)__main_block_func_0,&__main_block_desc_0_DATA);// 執行block內部的源碼 BlockOne->FuncPtr(BlockOne);

上述代碼中__main_block_impl_0函數接受兩個參數, 并有一個返回值, 最后把函數的地址返回給BlockOne, 下面找到__main_block_impl_0的定義

// 結構體 struct __main_block_impl_0 {struct __block_impl impl;struct __main_block_desc_0* Desc;// c++中的構造函數, 類似于OC中的init方法// flags: 默認參數, 調用時可不傳__main_block_impl_0(void *fp, struct __main_block_desc_0 *desc, int flags=0) {impl.isa = &_NSConcreteStackBlock;impl.Flags = flags;impl.FuncPtr = fp;Desc = desc;} };
  • __main_block_impl_0函數中的第一個參數__main_block_func_0賦值給了fp, fp又賦值給了impl.FuncPtr, 也就意味著impl.FuncPtr中存儲的就是我們要執行的__main_block_func_0函數的地址
  • Block結構體中的isa指向了_NSConcreteStackBlock, 說明Block是一個_NSConcreteStackBlock類型, 具體后面會詳解
  • __main_block_impl_0函數中的第二個參數__main_block_desc_0_DATA
static struct __main_block_desc_0 {size_t reserved;size_t Block_size; } __main_block_desc_0_DATA = { 0, sizeof(struct __main_block_impl_0)};
  • 其中reserved賦值為0
  • Block_size被賦值為sizeof(struct __main_block_impl_0), 即為__main_block_impl_0這個結構體占用內存的大小
  • __main_block_impl_0的第二個參數, 接受的即為__main_block_desc_0結構體的變量(__main_block_desc_0_DATA)的地址

Block變量捕獲

  • 局部變量分為兩大類: auto和static
    • auto: 自動變量, 離開作用域就會自動銷毀, 默認情況下定義的局部變量都是auto修飾的變量, 系統都會默認給添加一個auto
    • auto不能修飾全局變量, 會報錯
    • static作用域內修飾局部變量, 可以修飾全局變量
  • 全局變量

局部變量

auto變量捕獲

auto局部變量在Block中是值傳遞

下述代碼輸出值為多少?

int age = 10;void (^BlockTwo)(void) = ^(void){NSLog(@"age = %d,",age); };age = 13; BlockTwo(); // 輸出10

輸出值為什么是10而不是13呢? 我們還是生成main.cpp代碼看一下吧, 相關核心代碼如下

struct __main_block_impl_0 {struct __block_impl impl;struct __main_block_desc_0* Desc;// 這里多了一個age屬性int age;__main_block_impl_0(void *fp, struct __main_block_desc_0 *desc, int _age, int flags=0) : age(_age) {impl.isa = &_NSConcreteStackBlock;impl.Flags = flags;impl.FuncPtr = fp;Desc = desc;} }; static void __main_block_func_0(struct __main_block_impl_0 *__cself) {int age = __cself->age; // bound by copyNSLog((NSString *)&__NSConstantStringImpl__var_folders_ty_804897ld2zg4pfcgx2p4wqh80000gn_T_main_80d62b_mi_0,age);}static struct __main_block_desc_0 {size_t reserved;size_t Block_size; } __main_block_desc_0_DATA = { 0, sizeof(struct __main_block_impl_0)}; int main(int argc, const char * argv[]) {/* @autoreleasepool */ { __AtAutoreleasePool __autoreleasepool; // 定義屬性int age = 10;// block的定義void (*BlockTwo)(void) = ((void (*)())&__main_block_impl_0((void *)__main_block_func_0, &__main_block_desc_0_DATA, age));// 改變屬性值age = 13;// 調用block((void (*)(__block_impl *))((__block_impl *)BlockTwo)->FuncPtr)((__block_impl *)BlockTwo);}return 0; } static struct IMAGE_INFO { unsigned version; unsigned flag; } _OBJC_IMAGE_INFO = { 0, 2 };

那么下面我們一步步看一下, 吧一些強制轉換的代碼去掉之后

int age = 10;void (*BlockTwo)(void) = &__main_block_impl_0(__main_block_func_0,&__main_block_desc_0_DATA,age);age = 13; BlockTwo->FuncPtr(BlockTwo);

在上面的__main_block_impl_0函數里面相比于之前的, 多了一個age參數

struct __main_block_impl_0 {struct __block_impl impl;struct __main_block_desc_0* Desc;// 新的屬性ageint age;// 構造函數, 多了_age參數__main_block_impl_0(void *fp, struct __main_block_desc_0 *desc, int _age, int flags=0) : age(_age) {impl.isa = &_NSConcreteStackBlock;impl.Flags = flags;impl.FuncPtr = fp;Desc = desc;} };
  • 上面的構造方法__main_block_impl_0中, 多了一個_age參數
  • 同時后面多了一條age(_age)語句, 在c++中, age(_age)相當于age = _age, 即給age屬性賦值, 存儲構造函數傳過來的age屬性的值
  • 所以在后面調用block的時候, block對應的結構體所存儲的age屬性的值仍然是10, 并沒有被更新
// 及時這里重新對age進行了賦值 age = 13;// 這里調用BlockTwo的時候, 結構體重的age屬性的值并沒有被更新 BlockTwo->FuncPtr(BlockTwo);// 最后在執行block內部邏輯的時候, static void __main_block_func_0(struct __main_block_impl_0 *__cself) {int age = __cself->age; // bound by copy// 這里的age, 仍然是block結構體中的age, 值并沒有改變, 所以輸出結果還是10NSLog((NSString *)&__NSConstantStringImpl__var_folders_ty_804897ld2zg4pfcgx2p4wqh80000gn_T_main_80d62b_mi_0,age); }

static變量捕獲

static局部變量在Block中是指針傳遞, 看一下下面代碼的輸出情況

auto int age = 10; static int weight = 20;void (^BlockTwo)(void) = ^(void){NSLog(@"age = %d, weight = %d,",age, weight); };age = 13; weight = 23; BlockTwo();
  • 上面代碼輸出結果: age = 10, weight = 23
  • 重新賦值后age的結果不變, 之前已經說過了
  • 可是weight的結果卻是賦值后的結果, 至于為什么, 請繼續向下看吧…
  • 我們還是生成main.cpp代碼看一下吧, 相關核心代碼如下
struct __main_block_impl_0 {struct __block_impl impl;struct __main_block_desc_0* Desc;int age;int *weight;__main_block_impl_0(void *fp, struct __main_block_desc_0 *desc, int _age, int *_weight, int flags=0) : age(_age), weight(_weight) {impl.isa = &_NSConcreteStackBlock;impl.Flags = flags;impl.FuncPtr = fp;Desc = desc;} }; static void __main_block_func_0(struct __main_block_impl_0 *__cself) {int age = __cself->age; // bound by copyint *weight = __cself->weight; // bound by copyNSLog((NSString *)&__NSConstantStringImpl__var_folders_ty_804897ld2zg4pfcgx2p4wqh80000gn_T_main_282a93_mi_0,age, (*weight));}static struct __main_block_desc_0 {size_t reserved;size_t Block_size; } __main_block_desc_0_DATA = { 0, sizeof(struct __main_block_impl_0)}; int main(int argc, const char * argv[]) {/* @autoreleasepool */ { __AtAutoreleasePool __autoreleasepool; auto int age = 10;static int weight = 20;void (*BlockTwo)(void) = ((void (*)())&__main_block_impl_0((void *)__main_block_func_0, &__main_block_desc_0_DATA, age, &weight));age = 13;weight = 23;((void (*)(__block_impl *))((__block_impl *)BlockTwo)->FuncPtr)((__block_impl *)BlockTwo);}return 0; } static struct IMAGE_INFO { unsigned version; unsigned flag; } _OBJC_IMAGE_INFO = { 0, 2 };
  • 從上面代碼可以看到__main_block_impl_0類中多了兩個成員變量age和weight, 說明兩個變量我們都可以捕獲到
  • 不同的是, 同樣都是int變量, 使用不同的修飾詞修飾, __main_block_impl_0類中也是不同的
  • static修飾的變量weight在block中存儲的是weight的地址, 在后面的block函數中我們使用的也是其地址
int age; int *weight;// &weight void (*BlockTwo)(void) = &__main_block_impl_0(__main_block_func_0, &__main_block_desc_0_DATA, age, &weight);// 下面構造方法中, 同樣(weight(_weight)方法之前講過)將傳過來的weight的地址賦值給了 (int *weight;)__main_block_impl_0(void *fp, struct __main_block_desc_0 *desc, int _age, int *_weight, int flags=0) : age(_age), weight(_weight) {impl.isa = &_NSConcreteStackBlock;impl.Flags = flags;impl.FuncPtr = fp;Desc = desc; }
  • 也就是說上面的構造函數中
    • age保存的是一個準確的值
    • weight保存的是weight所在的內存地址
  • 所以在最后調用block內部邏輯的時候
static void __main_block_func_0(struct __main_block_impl_0 *__cself) {int age = __cself->age; // bound by copyint *weight = __cself->weight; // bound by copy// (*weight)相當于從weight的內存地址中取值, 在執行操作// 然而weight內存中的值已經在后面賦值的時候被更新了, 所以這里取出的值是賦值后的NSLog((NSString *)&__NSConstantStringImpl__var_folders_ty_804897ld2zg4pfcgx2p4wqh80000gn_T_main_282a93_mi_0,age, (*weight)); }
  • 也就是說, 同樣是局部變量
  • auto修飾的變量在block中存儲的是變量的值(值傳遞)
  • static修飾的變量在block中存儲的是變量的內存地址(地址傳遞)

全局變量

int age = 10; static int weight = 20;int main(int argc, const char * argv[]) {@autoreleasepool {void (^BlockTwo)(void) = ^(void){NSLog(@"age = %d, weight = %d,",age, weight);};age = 13;weight = 23;BlockTwo();}return 0; }

上面代碼的輸出結果, 毫無疑問是13和23, 相關c++代碼如下

int age = 10; static int weight = 20;struct __main_block_impl_0 {struct __block_impl impl;struct __main_block_desc_0* Desc;__main_block_impl_0(void *fp, struct __main_block_desc_0 *desc, int flags=0) {impl.isa = &_NSConcreteStackBlock;impl.Flags = flags;impl.FuncPtr = fp;Desc = desc;} }; static void __main_block_func_0(struct __main_block_impl_0 *__cself) {// 封裝了block執行邏輯的函數NSLog((NSString *)&__NSConstantStringImpl__var_folders_ty_804897ld2zg4pfcgx2p4wqh80000gn_T_main_0ee0bb_mi_0,age, weight);}static struct __main_block_desc_0 {size_t reserved;size_t Block_size; } __main_block_desc_0_DATA = { 0, sizeof(struct __main_block_impl_0)}; int main(int argc, const char * argv[]) {/* @autoreleasepool */ { __AtAutoreleasePool __autoreleasepool; // 定義block變量void (*BlockTwo)(void) = ((void (*)())&__main_block_impl_0((void *)__main_block_func_0, &__main_block_desc_0_DATA));age = 13;weight = 23;((void (*)(__block_impl *))((__block_impl *)BlockTwo)->FuncPtr)((__block_impl *)BlockTwo);}return 0; } static struct IMAGE_INFO { unsigned version; unsigned flag; } _OBJC_IMAGE_INFO = { 0, 2 };
  • 從上面代碼可以看出__main_block_impl_0結構體重并沒有捕獲到age和weight的成員變量
  • 同樣在定義block變量的時候中也不需要傳入age和weight的變量
  • 在封裝了block執行邏輯的函數中, 就可以直接使用全局的變量即可

Block的類型

Block的三種類型

  • 在之前的C++源碼中, __main_block_impl_0結構體中isa指向的類型是_NSConcreteStackBlock
  • 下面就具體看一下, Block的只要類型有那些
  • 先看一下下面這部分代碼的輸出結果
void (^block)(void) = ^(void){NSLog(@"Hello World"); };NSLog(@"%@", [block class]); NSLog(@"%@", [[block class] superclass]); NSLog(@"%@", [[[block class] superclass] superclass]); NSLog(@"%@", [[[[block class] superclass] superclass] superclass]);/*2019-06-24 15:46:32.506386+0800 Block[3307:499032] __NSGlobalBlock__2019-06-24 15:46:32.506578+0800 Block[3307:499032] __NSGlobalBlock2019-06-24 15:46:32.506593+0800 Block[3307:499032] NSBlock2019-06-24 15:46:32.506605+0800 Block[3307:499032] NSObject*/
  • block的類型NSBlock最終也是繼承自NSObject
  • 這也可以解釋為什么block的結構體__main_block_impl_0中會有一個isa指針了
  • 此外, block共有三種類型, 可以通過調用class方法或者isa指針查看具體類型, 最終都是繼承自NSBlock類型
    • __NSGlobalBlock__或者_NSConcreteGlobalBlock
    • __NSStackBlock__或者_NSConcreteStackBlock
    • __NSMallocBlock__或者_NSConcreteMallocBlock

block在內存中的分配

  • _NSConcreteGlobalBlock: 在數據區域
  • _NSConcreteStackBlock: 在棧區域
  • _NSConcreteMallocBlock: 在堆區域

  • 應用程序的內存分配圖如上圖所示, 自上而下依次為內存的低地址–>內存的高地址
  • 程序區域: 代碼段, 用于存放代碼
  • 數據區域: 數據段, 用于存放全局變量
  • 堆: 動態分配內存,需要程序員自己申請,程序員自己管理, 通常是alloc或者malloc方式申請的內存
  • 棧: 用于存放局部變量, 系統會自動分配內存, 自動銷毀內存

區分不同的block類型

  • 上面提到, 一共有三種block類型, 且不同的block類型存放在內存的不同位置
  • 但是如何區分所定義的block
    到底是哪一種類型呢
    看看下面代碼的執行情況, 運行環境實在MRC環境下
static int age = 10; int main(int argc, const char * argv[]) {@autoreleasepool {int weight = 21;void (^block1)(void) = ^(void){NSLog(@"Hello World");};void (^block2)(void) = ^(void){NSLog(@"age = %d", age);};void (^block3)(void) = ^(void){NSLog(@"age = %d", weight);};NSLog(@"block1 = %@", [block1 class]);NSLog(@"block2 = %@", [block2 class]);NSLog(@"block3 = %@", [block3 class]);/*2019-06-24 21:13:14.555206+0800 Block[30548:1189724] block1 = __NSGlobalBlock__2019-06-24 21:13:14.555444+0800 Block[30548:1189724] block2 = __NSGlobalBlock__2019-06-24 21:13:14.555465+0800 Block[30548:1189724] block3 = __NSStackBlock__*/}return 0; }

針對各種不同的block總結如下

block類型環境
__NSGlobalBlock__沒有訪問auto變量
__NSStackBlock__訪問了auto變量
__NSMallocBlock____NSStackBlock__調用了copy
  • 由于__NSMallocBlock__是放在堆區域
  • 要想創建出__NSMallocBlock__類型的block, 我們可以調用copy方法
void (^block3)(void) = ^(void){NSLog(@"age = %d", weight); };NSLog(@"block3 = %@", [block3 class]); NSLog(@"block3 = %@", [[block3 copy] class]); /* 輸出分別是: block3 = __NSStackBlock__ block3 = __NSMallocBlock__ */
  • 從上面的代碼中我們可以明顯看到, __NSStackBlock__類型的block調用copy方法后, 就會變成__NSMallocBlock__類型的block
  • 相當于生成的block是在堆區域的
  • 那么另外兩種類型調用copy方法后,又會如何? 下面一起來看一下吧
int weight = 21; void (^block1)(void) = ^(void){NSLog(@"Hello World"); }; void (^block3)(void) = ^(void){NSLog(@"age = %d", weight); };NSLog(@"block1 = %@", [block1 class]); NSLog(@"block1 = %@", [[block1 copy] class]); NSLog(@"block3 = %@", [block3 class]); NSLog(@"block3 = %@", [[block3 copy] class]); NSLog(@"block3 = %@", [[[block3 copy] copy] class]); /*__NSGlobalBlock____NSGlobalBlock____NSStackBlock____NSMallocBlock____NSMallocBlock__*/
  • 從上面的代碼可以看到, 只有__NSStackBlock__類型的block調用copy之后才會變成__NSMallocBlock__類型, 其他的都是原類型
  • 主要也是__NSStackBlock__類型的作用域是在棧中, 作用域中的局部變量會在函數結束時自動銷毀
  • __NSStackBlock__調用copy操作后,分配的內存地址相當于從棧復制到堆;副本存儲位置是堆
  • 其他的則可參考下面表格
Block類副本源的配置存儲域復制效果
__NSStackBlock__從棧復制到堆
__NSGlobalBlock__程序的數據區域什么也不做
__NSMallocBlock__引用計數增加
  • 在ARC環境下, 編譯器會根據情況自動將站上的block復制到堆上, 類似以下情況
    • block作為函數返回值時
    • 將block賦值給__strong修飾的指針時
    • block作為GCD的方法參數時

__block修飾符

Question: 定義一個auto修飾的局部變量, 并在block中修改該變量的值, 能否修改成功呢?

auto int width = 10; static int height = 20; void (^block)(void) = ^(void){// 事實證明, 在Xcode中這行代碼是報錯的width = 22;// 但是static修飾的變量, 卻是可以賦值, 不會報錯height = 22;NSLog(@"width = %d, height = %d", width, height); };block();// width = 10, height = 22
  • 在之前提到, 在block中, auto修飾的變量是值傳遞
  • static修飾的變量是指針傳遞, 所以在上述代碼中, block存儲的只是height的內存地址
  • 同樣auto變量實在main函數中定義的, 而block的執行邏輯是在__main_block_func_0結構體的方法中執行的, 相當于局部變量不能跨函數訪問
  • 至于static修飾的變量為什么可以修改?
    • 在__main_block_impl_0結構體中height存儲的是其內存地址, 在其他函數或者結構體中訪問和改變height的方式都是通過其真真訪問的
    • 類似賦值方式: (*height) = 22;
    • 取值方式: (*height)

__block修飾auto變量

__block auto int width = 10;void (^block)(void) = ^(void) {// 很明顯, 這里就可以修改了width = 12;NSLog(@"width = %d", width); };block(); // width = 12

為什么上面的代碼就可以修改變量了呢, 這是為什么呢…請看源碼

下面是生成的block的結構體

struct __main_block_impl_0 {struct __block_impl impl;struct __main_block_desc_0* Desc;// 這里的width被包裝成了一個__Block_byref_width_0對象__Block_byref_width_0 *width; // by ref// 這里可以對比一下之前的未被__block修飾的int變量// int width;__main_block_impl_0(void *fp, struct __main_block_desc_0 *desc, __Block_byref_width_0 *_width, int flags=0) : width(_width->__forwarding) {impl.isa = &_NSConcreteStackBlock;impl.Flags = flags;impl.FuncPtr = fp;Desc = desc;} };
  • 上述代碼看到__block可以用于解決block內部無法修改auto修飾的變量值得問題
  • 但是__block不能修飾全局變量和static修飾的靜態變量(同樣也不需要, 因為在block內部可以直接修改)
  • 經過__block修飾的變量會被包裝成一個對象(__Block_byref_width_0)
  • 下面是width被包裝后的對象的結構體, 在結構體內, 會有一個width成員變量
struct __Block_byref_width_0 {void *__isa;// 一個指向自己本身的成員變量__Block_byref_width_0 *__forwarding;int __flags;int __size;// 外部定義的auto變量int width; };

下面我們先看一下, auto和block的定義和調用

int main(int argc, const char * argv[]) {/* @autoreleasepool */ { __AtAutoreleasePool __autoreleasepool; // __block auto int width = 10;auto __Block_byref_width_0 width = {0,&width,0,sizeof(__Block_byref_width_0),10};void (*block)(void) = &__main_block_impl_0(__main_block_func_0,&__main_block_desc_0_DATA,&width,570425344);block->FuncPtr(block);}return 0; }
  • 可以看到在定義的__Block_byref_width_0類型的width中的每一個參數分別賦值給了__Block_byref_width_0結構體中的每一個成員變量
  • 而在block內部重新對width重新賦值的邏輯中
static void __main_block_func_0(struct __main_block_impl_0 *__cself) {__Block_byref_width_0 *width = __cself->width; // bound by ref(width->__forwarding->width) = 12;NSLog((NSString *)&__NSConstantStringImpl__var_folders_ty_804897ld2zg4pfcgx2p4wqh80000gn_T_main_9241d5_mi_0, (width->__forwarding->width)); }
  • 上面代碼中的width是一個__Block_byref_width_0類型的變量
  • width對象通過找到內部的__forwarding成員變量
  • 在__Block_byref_width_0結構體中__forwarding是一個指向自己本身的成員變量
  • 所以最后再通過__forwarding找到__Block_byref_width_0的成員變量width, 在進行重新賦值
  • 在NSLog中也是通過這種邏輯獲取width的值

總結

以上是生活随笔為你收集整理的浅谈OC中Block的本质的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

四虎影视成人永久免费观看亚洲欧美 | 欧美夫妻性生活电影 | 成人a级网站 | www.五月天婷婷 | 欧美另类交在线观看 | 久久亚洲免费 | 丁香久久婷婷 | 三级动态视频在线观看 | 免费中文字幕在线观看 | 玖玖在线观看视频 | 久久久精品视频网站 | 国产精品欧美久久久久无广告 | 成人国产精品久久久春色 | 久久久久久久免费 | 国产精品久久久久久妇 | 人人揉人人揉人人揉人人揉97 | 国产精品久久网站 | 黄色大片入口 | 国产成人一区二区啪在线观看 | 99免费观看视频 | 日韩免费中文字幕 | 麻豆小视频在线观看 | 欧美精品一区在线发布 | 一区二区三区中文字幕在线 | 亚洲最大免费成人网 | 国产99re| 99国产精品免费网站 | 99精品国产免费久久久久久下载 | 久久国产欧美日韩精品 | 成人午夜电影在线 | 美女久久视频 | 丁香五婷 | 欧美一级视频免费 | 精品不卡视频 | 国产成人av网址 | 亚洲精选久久 | 婷婷伊人综合亚洲综合网 | 日本中文乱码卡一卡二新区 | 狠狠地操| a√国产免费a | 欧美淫视频 | 国产欧美综合视频 | 国产女人40精品一区毛片视频 | 综合色亚洲 | 久久久久久久18 | 久久成人国产精品入口 | 久久艹国产 | 天天艹天天操 | 国产高清不卡一区二区三区 | 二区中文字幕 | 免费裸体视频网 | 欧美日韩在线网站 | 欧美综合久久 | 国产又粗又猛又色又黄网站 | 一区二区三区在线不卡 | 国产精品一区免费看8c0m | 国产一区在线免费观看视频 | 日韩精品免费在线播放 | 玖玖爱免费视频 | 国产成人99av超碰超爽 | 91丨九色丨国产在线 | 日日操天天射 | 日韩一区二区三区免费视频 | 久久网站最新地址 | 久久呀| 欧美日韩亚洲在线 | 亚洲成人资源网 | 99热在| 日韩videos高潮hd | 国产精品一区在线观看 | 夜夜躁狠狠躁日日躁视频黑人 | 超碰在线资源 | 久久色中文字幕 | 五月网婷婷 | 久久综合网色—综合色88 | 349k.cc看片app | 丁香婷婷综合激情 | 久草在在线 | 成人av一级片 | 久草在线久草在线2 | 天天色天天操综合 | 国产精品 国产精品 | 黄网站免费大全入口 | 亚洲2019精品 | 天天综合网入口 | 欧美精品久久久久久久久免 | 2018亚洲男人天堂 | 成年人网站免费在线观看 | 日韩欧美在线一区二区 | 日韩精品你懂的 | 在线观看免费成人 | www.成人精品 | 天天干天天玩天天操 | 日本黄色a级大片 | 国产精品一区二区免费 | 中文十次啦 | 91成人免费视频 | 久久精精品视频 | 开心激情五月网 | 精品91视频 | 在线观看国产亚洲 | 国产精品麻豆果冻传媒在线播放 | 成人少妇影院yyyy | 欧美激情视频三区 | 69国产成人综合久久精品欧美 | 五月天色婷婷丁香 | 丁香婷婷激情五月 | 婷婷丁香六月 | 人人爽网站| 午夜国产福利在线 | 国产精品99久久久久久小说 | 天堂va在线高清一区 | 亚洲欧美国产精品18p | av成人免费网站 | 91视频 - 88av | 丰满少妇一级片 | 91麻豆精品国产91久久久无需广告 | 国产一区福利在线 | 天天干国产 | 国产黄在线观看 | 欧美一级专区免费大片 | 91九色视频在线观看 | 国产色在线观看 | 99精品视频在线看 | 日韩网站免费观看 | 欧美伦理一区二区三区 | 亚州精品在线视频 | 最新国产精品亚洲 | 国产黄视频在线观看 | 久久 一区| 中文字幕在线影院 | 国产成人免费精品 | 国产精品69av | 国产999视频在线观看 | 午夜久久 | 欧美一级裸体视频 | 美女一二三区 | 色网站在线观看 | 婷婷日韩| 国产日韩欧美视频在线观看 | 在线免费观看视频一区二区三区 | 亚洲精品久久久蜜桃 | 91一区啪爱嗯打偷拍欧美 | 精品毛片久久久久久 | 日韩欧美在线高清 | 天堂av影院| 91视频 - x99av | 国产视频 亚洲精品 | 亚洲欧美日本一区二区三区 | 国产一区 在线播放 | 久久人人爽人人 | 久久国产精品99国产精 | 国产综合在线观看视频 | 摸阴视频| 99久久99久久精品国产片果冰 | 久久久免费视频播放 | 黄色大片中国 | 四虎永久免费 | www.久艹| 香蕉久草 | 中文字幕传媒 | 99欧美视频 | 中文字幕激情 | 91影视成人 | 91香蕉国产 | 久久99国产精品久久 | 麻豆国产视频下载 | 日韩av资源在线观看 | 蜜臀av夜夜澡人人爽人人桃色 | 四虎在线免费视频 | 日韩av在线看 | 欧美另类高清 videos | 99re视频在线观看 | 亚洲精品成人免费 | av中文天堂在线 | 中文 一区二区 | 午夜精品久久久久久99热明星 | freejavvideo日本免费 | 五月婷婷婷婷婷 | 色夜影院 | 成人免费视频网站 | 久久尤物电影视频在线观看 | 日韩不卡高清视频 | 婷婷色在线 | 天天摸夜夜操 | 在线香蕉视频 | 免费在线观看午夜视频 | 1024手机基地在线观看 | 五月天色站 | 天天草天天色 | 91在线看片| 亚洲精品91天天久久人人 | 国产精品黄网站在线观看 | 欧美成人一二区 | 九色琪琪久久综合网天天 | 免费又黄又爽视频 | 欧美综合在线视频 | 精品极品在线 | 国产精品精| 久久久久女人精品毛片九一 | 美女一区网站 | 五月激情久久久 | 成年人app网址 | 久久久国产一区 | 亚州欧美精品 | 国产精品美女久久久久久免费 | 亚洲精品视频在线免费播放 | 久久在线免费观看 | 成人黄色在线视频 | 欧美日韩国产一区二区三区在线观看 | 国产1区2区3区在线 亚洲自拍偷拍色图 | 五月婷亚洲 | 欧美特一级片 | 国产精品免费久久久久影院仙踪林 | 色天天| 国产成人av电影在线观看 | 热99在线视频 | 成人毛片在线视频 | 久久免费99精品久久久久久 | 操操操日日日干干干 | 中文字幕在线观看完整版 | 久久小视频 | 日本资源中文字幕在线 | 99久久精品国产观看 | 久久黄色小说 | 国产手机在线精品 | 97国产情侣爱久久免费观看 | 高清中文字幕 | 国产精品久久久久久久99 | 国产精品一区二区美女视频免费看 | 国产视频第二页 | 久久久久人人 | 2017狠狠干 | 亚洲精品字幕 | 亚洲婷婷综合色高清在线 | 九色91福利 | 色婷婷精品大在线视频 | 久久歪歪 | 国产 欧美 在线 | 亚洲天堂网站 | 天天干,天天草 | 亚洲一区欧美精品 | 国产高清av免费在线观看 | 久草在线视频网 | 啪啪免费试看 | 日韩中文字幕a | 免费中文字幕视频 | 99久久婷婷国产一区二区三区 | 天天天综合网 | 麻豆视频网址 | 亚洲国产精品女人久久久 | 免费在线观看av网址 | 狠狠干五月天 | 五月婷婷激情综合网 | 黄色亚洲免费 | 91大神精品视频在线观看 | 超碰在线亚洲 | 久久久www免费电影网 | 精品福利在线视频 | 中文字幕 国产 一区 | 国产精品久久久久久久久久久杏吧 | 色综合中文综合网 | 中文字幕xxxx| 激情网五月 | 国产韩国日本高清视频 | 欧美午夜激情网 | 色综合天天综合网国产成人网 | 国产99久久久精品视频 | 亚洲精品视 | 一级性av | av资源网在线播放 | 日本在线视频一区二区三区 | 国产精品一区二区久久精品爱涩 | 午夜精品一区二区三区可下载 | 国产 精品 资源 | 91chinese在线 | 亚洲精品国偷自产在线91正片 | 久久婷婷激情 | 天天摸天天干天天操天天射 | 成人免费网视频 | 天天射天天舔天天干 | 久久美女电影 | 欧洲一区二区在线观看 | 久久综合久久综合久久综合 | 久久久综合精品 | 蜜臀av性久久久久av蜜臀妖精 | 中文字幕日韩一区二区三区不卡 | 亚洲电影图片小说 | 亚洲精品久久久久久久蜜桃 | www.香蕉视频 | 欧美日韩在线观看一区 | 美女免费视频一区二区 | 国产精品每日更新 | 天天摸天天操天天爽 | 中文字幕观看在线 | 久久久影院一区二区三区 | 免费一级黄色 | 99久久婷婷 | 99免费视频| 精品国产伦一区二区三区观看体验 | 亚洲激情久久 | 亚洲精品免费在线播放 | 国产91探花 | 99精品免费久久久久久久久 | 中文字幕精品一区二区三区电影 | 性色av一区二区三区在线观看 | 99精品国产成人一区二区 | 成年人在线免费视频观看 | 婷婷综合五月天 | 免费看一级黄色 | 国产一区电影在线观看 | 亚洲1级片| 久久国产精品99久久久久久进口 | 麻豆91在线观看 | 四虎影视精品成人 | 免费观看一级特黄欧美大片 | 九九亚洲精品 | 国产精品久久久久久久久久直播 | 99在线精品视频在线观看 | 青青草国产免费 | 人人爽人人爽人人片av | 96av在线视频| 亚洲三级网站 | 久久久久久久久久久久电影 | 久久精品国产亚洲 | 天天拍天天干 | 色偷偷88888欧美精品久久 | 天天射天天干天天操 | 福利二区视频 | 日日干夜夜草 | 国产黄色免费电影 | 久久久亚洲国产精品麻豆综合天堂 | 日韩精品1区2区 | 九九免费精品 | 午夜的福利 | 在线观看精品一区 | 亚洲精品欧美视频 | 伊人色综合久久天天 | 美女黄频在线观看 | 久久久蜜桃 | 国产视频首页 | 一区二区电影网 | 国产亚洲无 | 91在线视频观看 | 免费看的黄色录像 | 日批视频在线播放 | 天天搞天天干天天色 | 国产麻豆视频免费观看 | 欧美韩日在线 | 婷婷色视频 | 人人射人人爽 | 久久精品国产一区二区三 | 国产精品成人a免费观看 | 色综合天天综合 | 国产123区在线观看 国产精品麻豆91 | 99久久精品费精品 | 亚洲精区二区三区四区麻豆 | 天天干天天做天天操 | 三级av片| 久久这里有精品 | 天堂入口网站 | 国产一级精品绿帽视频 | 国产精品网红直播 | 国产一区二区三区免费在线 | 五月天九九 | 国产精品原创av片国产免费 | 不卡的一区二区三区 | 久久精品视频2 | 日韩成人看片 | 欧美日韩3p | 黄色片免费看 | 国产涩图| 在线观看中文字幕亚洲 | 国产精品久久久久久久久久妇女 | 国产专区视频在线观看 | 一区二区不卡高清 | 久久伊人五月天 | 三级av在线 | 极品美女被弄高潮视频网站 | 国产欧美精品一区二区三区四区 | 三级av中文字幕 | 日韩黄色在线电影 | 免费的黄色av | 国产精品av久久久久久无 | 婷婷综合成人 | 玖玖在线看 | 日韩在线视频观看免费 | 一本一本久久a久久精品综合妖精 | 日韩中文字幕在线不卡 | 天天五月天色 | 国产精品96久久久久久吹潮 | 久久人人精 | 久久九九免费视频 | 精品视频免费观看 | 综合久久网站 | 精品国产一二三 | 亚洲爱爱视频 | 色婷婷激情五月 | 久久免费视屏 | 蜜桃麻豆www久久囤产精品 | 久久经典国产视频 | 久久九九久久九九 | 国产亚洲激情视频在线 | 黄色亚洲大片免费在线观看 | 国产高清免费 | 欧美日视频 | 免费国产视频 | 日韩在线观看视频免费 | 国产精品毛片一区二区 | 国产亚州精品视频 | 国产精品 国内视频 | 国产精品一区二区三区四 | 在线黄色av电影 | 亚洲视频综合 | 欧美日韩高清不卡 | 国产美女视频免费观看的网站 | 日韩羞羞 | 国产这里只有精品 | 日韩精品一区二区三区视频播放 | 久久9视频 | 国产一二三四在线观看视频 | 丰满少妇高潮在线观看 | 日韩成人免费电影 | 欧美精品在线观看 | 欧美整片sss | 欧美日韩天堂 | 亚洲专区路线二 | 在线观看视频国产 | 日韩欧美视频 | avv天堂| 插综合网| 黄色免费大全 | 精品国产一区二区三区在线 | 国产视频一区在线 | 日韩精品在线看 | 美女黄久久 | 999成人| 色搞搞| 国产在线观看网站 | 国产福利免费在线观看 | 日韩色综合 | 欧美在线free | 伊甸园av在线 | 欧美成人91| 天天操天天摸天天干 | 国产精品永久久久久久久www | 免费网站污 | 91色在线观看视频 | 成人小视频在线 | 亚洲午夜久久久影院 | 亚洲视频大全 | 91完整版在线观看 | 久久久久久久久久国产精品 | av在线官网 | 91最新在线视频 | 一区 二区电影免费在线观看 | 久久伊人八月婷婷综合激情 | 香蕉手机在线 | 亚洲欧美视频网站 | 伊人亚洲精品 | 久久9视频| 欧美天天综合 | 国产日韩精品在线观看 | 综合色综合色 | 久草在线视频免费资源观看 | 色综合天天综合 | 日韩网站免费观看 | 久久综合狠狠综合久久激情 | 日韩色视频在线观看 | 久久综合国产伦精品免费 | 国产在线精品播放 | av成人资源 | 久久成人久久 | 日韩欧美成 | 欧美久久久久久久久久 | 午夜aaaa| 性色av免费看 | 国产一区二区三区在线免费观看 | 免费在线观看av | 国产电影黄色av | 日韩国产精品一区 | 日韩毛片在线播放 | av一级网站 | 成人小视频在线 | 91视频免费视频 | 亚洲天天 | 久久久免费在线观看 | 欧美激情第一页xxx 午夜性福利 | 久久久久久综合 | 99久久精品国产毛片 | 69精品久久久 | 亚洲国产精品久久久久婷婷884 | av网站在线观看免费 | 国产精品不卡在线播放 | 2019久久精品| 亚洲精品高清视频在线观看 | 色免费在线| 99精品欧美一区二区三区 | 免费久久视频 | 久久久久久网址 | 天天曰天天爽 | 国产精品久久久久久久妇 | av久久在线 | 色网站免费在线看 | 亚洲综合色视频在线观看 | 成人免费 在线播放 | 91九色porny蝌蚪视频 | 黄a网站| 黄污视频大全 | 欧美激情视频一二区 | 韩国av免费观看 | 探花视频在线观看+在线播放 | av一级在线观看 | 最近中文字幕免费大全 | 婷婷国产一区二区三区 | 狠狠躁日日躁狂躁夜夜躁 | 日韩精品 在线视频 | 国产精品无 | 欧美性生活免费 | 81精品国产乱码久久久久久 | 国产精品美女毛片真酒店 | 玖草在线观看 | 99久久精品免费看 | 国产第一福利 | 国产福利一区二区在线 | 欧美一区二区精品在线 | 欧美日韩在线网站 | 久久久久久久免费看 | 日韩资源在线 | 二区精品视频 | 国产精品久久久久影视 | 国产亚州精品视频 | 久久男人视频 | 国产欧美精品一区二区三区四区 | 久草在线观看视频免费 | 91中文在线视频 | www久| 黄色成人av| 日本久久中文字幕 | 最新日韩中文字幕 | 久久一线 | 中文字幕精品一区二区精品 | 国产精品一区二区在线 | av一级久久 | 国产成人精品一区二区三区免费 | 国产色视频123区 | 国产涩图| 国产日韩视频在线播放 | 欧美污在线观看 | 久久久www免费电影网 | 91免费观看视频在线 | 五月天色丁香 | 免费在线观看中文字幕 | 国产精品婷婷午夜在线观看 | 免费在线日韩 | 国产美女被啪进深处喷白浆视频 | 91人人视频在线观看 | 久久这里只有精品9 | 国产日女人 | 狠狠干2018| 日韩久久在线 | 久久久精品国产一区二区 | 久久社区视频 | 香蕉成人在线视频 | 欧美日韩高清一区二区 国产亚洲免费看 | 亚洲精品国产拍在线 | 国产剧情一区二区在线观看 | 国产区免费在线 | 国产在线97 | 久久99中文字幕 | 久久综合电影 | 久久亚洲免费视频 | 91在线入口 | 日韩在线观看视频免费 | 亚洲精品一区二区在线观看 | 天天操网址 | 欧美国产亚洲精品久久久8v | 99久久综合国产精品二区 | 美女网站在线观看 | 久久99在线| 久久综合九色九九 | 成 人 免费 黄 色 视频 | 四虎在线免费观看 | 美女网站视频久久 | 婷婷精品 | 91精品视频网站 | 国产短视频在线播放 | 激情婷婷色 | 国产精品久久电影网 | 国产视频1区2区3区 久久夜视频 | 九九影视理伦片 | 97在线看 | 久久伊人精品天天 | 又湿又紧又大又爽a视频国产 | 日韩在线中文字幕视频 | 深爱开心激情 | 99久久精品电影 | 精品一区二区日韩 | 日韩一级网站 | 亚洲精品午夜aaa久久久 | 久久免费视频99 | 丁香五月缴情综合网 | 97理论片| 日韩免费电影一区二区三区 | 免费看片日韩 | 色噜噜色噜噜 | 免费高清影视 | 97在线精品 | 亚洲在线精品 | 日韩 在线a| 久久精品视频2 | 日韩精品在线看 | 日本不卡一区二区 | 伊人久在线 | 中文字幕在线免费播放 | 国产中文字幕视频在线观看 | 亚洲视频1 | 在线电影 你懂得 | 国模精品在线 | 国产在线观看污片 | 亚洲精品中文字幕视频 | 国产精品一区免费在线观看 | 久久久2o19精品 | 亚洲精区二区三区四区麻豆 | 中文字幕丰满人伦在线 | 午夜天天操| 四虎在线免费观看 | 国内丰满少妇猛烈精品播 | 九草在线观看 | www..com毛片 | 97网站| 国产精品久久久久久久av大片 | 亚洲精品电影在线 | 91色在线观看视频 | 日韩免费视频播放 | 香蕉91视频 | 97超碰色偷偷 | 国产精品自拍在线 | 人人插人人爱 | 又长又大又黑又粗欧美 | 亚洲视频免费在线观看 | www.香蕉 | 黄色大全在线观看 | 欧美性脚交 | 日韩动态视频 | 色诱亚洲精品久久久久久 | 国产高清不卡在线 | 欧美激情视频一二区 | 久久精品亚洲精品国产欧美 | 欧美伦理电影一区二区 | 天天人人 | 性色大片在线观看 | 久久综合久久综合久久 | 97超级碰碰碰碰久久久久 | 黄色日本免费 | 麻豆国产网站入口 | 在线小视频你懂的 | 国产精品破处视频 | 欧美国产日韩在线观看 | 日日色综合 | 国产国语在线 | 久久综合9988久久爱 | 最近更新好看的中文字幕 | 成人免费看片网址 | 亚洲国产成人精品电影在线观看 | 午夜丁香视频在线观看 | 在线观看视频亚洲 | 日韩在线观看av | 伊人狠狠干 | 久草视频精品 | 久久免视频 | 18pao国产成视频永久免费 | 中文字幕一区av | 免费能看的av | 国产色黄网站 | 久久久久久欧美二区电影网 | 中文在线8新资源库 | 午夜av在线 | 久久久国产高清 | 国产精品一区二区三区四 | 国产精品原创视频 | 成人一级视频在线观看 | 最新中文字幕在线观看视频 | 91久久久国产精品 | 中文字幕在线观看免费高清电影 | 国产日韩欧美自拍 | 九九综合在线 | 中文字幕丝袜一区二区 | 99久久免费看 | 999国产精品视频 | 九九免费精品视频在线观看 | 久久视频在线观看中文字幕 | 欧洲av不卡 | 久久久久久久久久伊人 | av蜜桃在线 | 91亚洲国产成人久久精品网站 | 中文字幕中文字幕在线中文字幕三区 | 国产电影一区二区三区四区 | 日韩视频一区二区三区 | 亚洲黄色免费在线 | 狠狠干狠狠色 | 成年人黄色大片在线 | 黄色福利| 91精品久久久久久综合乱菊 | 夜夜操天天干, | 精品女同一区二区三区在线观看 | 久久综合综合久久综合 | 精品视频一区在线观看 | 国产成人av | 亚洲国产精品日韩 | 精品国产亚洲一区二区麻豆 | 最新黄色av网址 | 色婷婷婷| 毛片一级免费一级 | 成年人免费在线看 | 国产小视频你懂的 | 日韩va欧美va亚洲va久久 | 亚洲一区美女视频在线观看免费 | 久久影视一区二区 | 日韩精品五月天 | 久久综合99 | 日韩av手机在线观看 | 国产不卡在线播放 | 狠狠做六月爱婷婷综合aⅴ 日本高清免费中文字幕 | 香蕉看片| 亚洲精品国 | 久久久国产精品一区二区三区 | 亚洲精品毛片一级91精品 | 欧美日韩xxxxx | 国产精品video爽爽爽爽 | 国产精品久久久久久久久免费 | 亚洲精品乱码 | 国产在线精品一区二区 | 在线性视频日韩欧美 | 夜夜爽www | 久久er99热精品一区二区三区 | 国产精品久久婷婷六月丁香 | 九九电影在线 | 国产成人精品a | 天天干天天色2020 | 久久久一本精品99久久精品66 | 在线激情网 | 国产色在线视频 | 激情在线网站 | 99热这里只有精品1 av中文字幕日韩 | 国产精品欧美久久久久无广告 | 91在线www | 日韩精品在线观看av | 91正在播放 | 黄色亚洲片 | 又大又硬又黄又爽视频在线观看 | 国产精品资源在线观看 | 在线黄色免费 | 国产麻豆精品一区二区 | 少妇激情久久 | 99热精品在线 | 免费观看黄色12片一级视频 | 日韩av在线小说 | 天天爽人人爽夜夜爽 | 成人黄色在线观看视频 | 色99色| 中文字幕在线观看2018 | 天天爱天天舔 | 91精品一区二区三区蜜桃 | 狠狠干电影 | 在线视频欧美亚洲 | 国产黄色理论片 | 国产资源网站 | 成人av电影在线播放 | 免费亚洲成人 | 在线播放国产精品 | 成人97视频| 日韩二级毛片 | 涩涩网站在线观看 | 98超碰在线| 一色屋精品视频在线观看 | av成人在线播放 | 日韩视频免费在线观看 | 人人草人 | 日韩美女免费线视频 | 在线观看久 | 午夜精品福利影院 | 96精品视频 | 1024手机基地在线观看 | 97超在线视频 | 日韩中文在线播放 | 中文字幕色婷婷在线视频 | 天天操夜夜叫 | 久久精选 | 99精品免费在线 | 日韩精品中文字幕在线观看 | 久久激情小视频 | 亚洲va欧美va| 一区二区三区在线视频111 | 国内三级在线观看 | 9992tv成人免费看片 | 精品日韩中文字幕 | 三级在线视频观看 | 丝袜美腿在线视频 | 性色大片在线观看 | 夜夜躁狠狠躁 | 黄色三级免费看 | 国产精品99久久久久久武松影视 | 成人午夜电影久久影院 | 免费视频成人 | 天天操天天舔天天干 | 日本黄色免费观看 | 综合激情| 成年人黄色av | 午夜精品久久久久久99热明星 | 欧美一性一交一乱 | 在线只有精品 | 成人91在线 | 久草在线资源视频 | 日韩av影视在线观看 | www激情久久 | 久久婷婷一区 | 黄色天堂在线观看 | 欧美日韩一区二区三区视频 | 久久免费的视频 | 看全黄大色黄大片 | 国产精品久久久视频 | 久久免费试看 | 色婷婷国产精品一区在线观看 | 99在线看 | 91豆花在线| 亚洲在线精品 | 激情av网| 久久精品视频18 | 久久99国产精品视频 | 日本不卡一区二区三区在线观看 | 三级黄色理论片 | 综合久久精品 | 欧美久久久久久久 | 992tv人人网tv亚洲精品 | 色狠狠婷婷 | 精品美女久久久久 | 在线看岛国av | 综合网天天色 | 久久一区91 | av成人免费观看 | 91九色精品女同系列 | 国产精品99精品 | 91在线视频在线观看 | 中文字幕av有码 | 久久在线视频精品 | 成人av网站在线播放 | 深夜精品福利 | 成年美女黄网站色大片免费看 | 午夜精品福利一区二区三区蜜桃 | 色诱亚洲精品久久久久久 | 久草免费看 | 国产精品久久久久久久电影 | 中文字幕av播放 | 中字幕视频在线永久在线观看免费 | 一区二区三区在线免费观看视频 | 青春草视频 | 麻豆精品国产传媒 | 亚洲伊人av | 国产美女久久 | av资源免费在线观看 | 在线视频91 | 亚洲播播 | 国产99一区 | 伊人狠狠色 | 2021久久| 成人国产精品久久久久久亚洲 | 国产.精品.日韩.另类.中文.在线.播放 | 天天射成人 | 精品国产123 | 激情综合电影网 | 狠狠网站| 中文字幕高清免费日韩视频在线 | 伊人狠狠色丁香婷婷综合 | 国产69精品久久99不卡的观看体验 | 久久综合色播五月 | 在线观看岛国av | 一区二区三区四区精品视频 | 欧美精品首页 | 天天干视频在线 | 久久99这里只有精品 | 丁香五月亚洲综合在线 | 日韩xxxbbb | 91麻豆精品国产91久久久无限制版 | 国产精品美女久久久网av | 国产精品欧美一区二区 | 91成人在线观看喷潮 | 五月天伊人网 | 国产成在线观看免费视频 | 99爱视频 | 狠狠干网址 | 国产精品高潮呻吟久久av无 | 天天看天天干天天操 | 成人h视频在线播放 | 亚洲午夜av | 麻豆视频在线观看 | 亚洲精品国精品久久99热一 | 少妇高潮冒白浆 | 蜜臀av性久久久久蜜臀aⅴ四虎 | 亚洲成人欧美 | 欧美xxxxx在线视频 | 成人午夜电影在线播放 | 91精品一区二区三区蜜臀 | 国产成人精品亚洲精品 | 日韩天堂在线观看 | 懂色av懂色av粉嫩av分享吧 | 九九热在线免费观看 | 国内精品久久久久影院优 | 日本在线观看中文字幕无线观看 | 九色91在线视频 | 亚洲免费一级 | 美女视频是黄的免费观看 | 日韩av快播电影网 | 国产免费高清视频 | 精品视频成人 | 在线看91| 不卡电影一区二区三区 | 午夜精品婷婷 | 五月在线| 激情久久影院 | 狠狠躁日日躁夜夜躁av | 国产精品高清免费在线观看 | 亚洲国产精品第一区二区 | 欧美在线观看视频一区二区三区 | 最近日本中文字幕a | 色婷婷免费视频 | 亚洲一二三在线 | 久久精品网站视频 | 在线观看自拍 | 日本一区二区三区免费看 | 日日干天夜夜 | 色综合夜色一区 | 亚洲精品视频免费在线 | 婷婷激情欧美 | 96av在线| 亚洲国产大片 | 国产视频中文字幕在线观看 | 99精品国产免费久久久久久下载 | www.com黄| 国产69精品久久99不卡的观看体验 | 亚洲国内精品在线 | 国产精品va在线播放 | 91国内在线 | 狠狠色丁香婷婷综合久小说久 | 欧美二区视频 | 97av超碰 | 亚洲一二区精品 | 伊人久久国产精品 | 久久久久久久毛片 | 99精品视频免费 | 午夜狠狠操 | 欧美va天堂在线电影 | 美女福利视频一区二区 | 91探花视频 | 一级欧美日韩 | 色黄www小说| 亚洲精品白浆高清久久久久久 | 色大片免费看 | 久久精品亚洲一区二区三区观看模式 | 亚洲色视频 | 日韩av午夜 | 天天摸天天干天天操天天射 | 久久久男人的天堂 | 久久久黄视频 | 在线国产一区二区三区 | 亚洲一级二级 | 在线观看成年人 | 毛片一级免费一级 | 亚洲免费在线 | 麻豆91在线播放 | 四虎成人免费观看 | 中文字幕视频网 | 97在线免费观看视频 | 午夜视频在线观看一区二区三区 | 中文字幕免费不卡视频 | 国产无限资源在线观看 | 国产精品18久久久久久不卡孕妇 | 亚洲国产视频在线 | 午夜久久久精品 | 中文字幕一区二区三区四区 | 免费国产在线精品 | 天天综合导航 | 日本黄色大片免费看 | 色噜噜在线观看 | 久久久国产99久久国产一 | 久久久久久久久久网 | 一级做a视频 | 亚洲精品mv在线观看 | av色一区 | 91精品国产乱码在线观看 | 久草视频在线免费播放 | 成人a级大片 | 91在线色 | 深爱综合网 | 国产视频一区在线播放 | av高清免费在线 | 91色九色 | 成人久久18免费网站图片 |