亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 系統 > iOS > 正文

iOS當多個網絡請求完成后執行下一步的方法詳解

2019-10-21 18:43:25
字體:
來源:轉載
供稿:網友

前言

在開發中,我們很容易遇到這樣的需求,需要我們同時做多個網絡請求,所有網絡請求都完成后才能進行下一步的操作。

網絡請求的任務是提交給子線程異步處理了,網絡請求這樣的任務也就快速執行完畢了,但是網絡請求是一個任務,處理收到的網絡響應又是一個任務,注意不要把這兩個過程混為一談。

如下載多個圖片,下載完了才能展示,今天我們就來研究一下這個問題的解決方案。

解決方法

1.首先,我們創建一個項目,然后做一般性的做法,不做任何處理去連續請求一個接口10次:

先在viewDidLoad中創建第一種情況.

//1.無處理 UIButton *Btn1 = [UIButton buttonWithType:UIButtonTypeCustom]; Btn1.frame = CGRectMake(100, 100, 100, 40); Btn1.backgroundColor = [UIColor grayColor]; [Btn1 setTitle:@"noConduct" forState:UIControlStateNormal]; [Btn1 addTarget:self action:@selector(Btn1) forControlEvents:UIControlEventTouchUpInside]; [self.view addSubview:Btn1];

實現第一種情況的方法

//1.noConduct-(void)Btn1{ NSString *str = @"http://www.jianshu.com/p/6930f335adba"; NSURL *url = [NSURL URLWithString:str]; NSURLRequest *request = [NSURLRequest requestWithURL:url]; NSURLSession *session = [NSURLSession sharedSession];  for (int i=0; i<10; i++) { NSURLSessionDataTask *task = [session dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {    NSLog(@"%d---%d",i,i);   }];  [task resume]; }  NSLog(@"end");}

運行,看看我們的控制臺輸出:

2017-12-04 17:10:10.503 DownImage[3289:261033] end2017-12-04 17:10:10.676 DownImage[3289:261080] 0---02017-12-04 17:10:10.704 DownImage[3289:261080] 1---12017-12-04 17:10:10.754 DownImage[3289:261096] 4---42017-12-04 17:10:10.760 DownImage[3289:261080] 2---22017-12-04 17:10:10.800 DownImage[3289:261096] 5---52017-12-04 17:10:10.840 DownImage[3289:261080] 7---72017-12-04 17:10:10.844 DownImage[3289:261082] 6---62017-12-04 17:10:10.846 DownImage[3289:261096] 3---32017-12-04 17:10:10.888 DownImage[3289:261096] 8---82017-12-04 17:10:10.945 DownImage[3289:261080] 9---9

很明顯,無任何處理情況下,end最先被打印出來,由于網絡請求的異步回調,然后各個網絡請求的回調順序是無序的。

2.使用GCD的dispatch_group_t

viewDidLoad里:

//2.group UIButton *Btn2 = [UIButton buttonWithType:UIButtonTypeCustom]; Btn2.frame = CGRectMake(100, 200, 100, 40); Btn2.backgroundColor = [UIColor grayColor]; [Btn2 setTitle:@"group--" forState:UIControlStateNormal]; [Btn2 addTarget:self action:@selector(Btn2) forControlEvents:UIControlEventTouchUpInside]; [self.view addSubview:Btn2];

實現:

//2.group---(void)Btn2{ NSString *str = @"http://www.jianshu.com/p/6930f335adba"; NSURL *url = [NSURL URLWithString:str]; NSURLRequest *request = [NSURLRequest requestWithURL:url]; NSURLSession *session = [NSURLSession sharedSession];  dispatch_group_t downloadGroup = dispatch_group_create(); for (int i=0; i<10; i++) { dispatch_group_enter(downloadGroup);  NSURLSessionDataTask *task = [session dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {    NSLog(@"%d---%d",i,i);  dispatch_group_leave(downloadGroup);   }];  [task resume]; }  dispatch_group_notify(downloadGroup, dispatch_get_main_queue(), ^{ NSLog(@"end"); });}

運行看看控制臺輸出:

2017-12-04 17:14:46.984 DownImage[3289:265374] 2---22017-12-04 17:14:46.987 DownImage[3289:265370] 1---12017-12-04 17:14:47.052 DownImage[3289:265383] 5---52017-12-04 17:14:47.065 DownImage[3289:265370] 4---42017-12-04 17:14:47.111 DownImage[3289:265379] 3---32017-12-04 17:14:47.121 DownImage[3289:265383] 6---62017-12-04 17:14:47.169 DownImage[3289:265383] 7---72017-12-04 17:14:47.192 DownImage[3289:265370] 9---92017-12-04 17:14:47.321 DownImage[3289:265383] 8---82017-12-04 17:14:47.747 DownImage[3289:265374] 0---02017-12-04 17:14:47.747 DownImage[3289:261033] end
2017-12-04 17:15:14.576 DownImage[3289:265942] 3---32017-12-04 17:15:14.626 DownImage[3289:265936] 2---22017-12-04 17:15:14.647 DownImage[3289:265944] 4---42017-12-04 17:15:14.648 DownImage[3289:265936] 0---02017-12-04 17:15:14.657 DownImage[3289:265943] 1---12017-12-04 17:15:14.709 DownImage[3289:265944] 5---52017-12-04 17:15:14.728 DownImage[3289:265944] 6---62017-12-04 17:15:14.734 DownImage[3289:265944] 7---72017-12-04 17:15:14.738 DownImage[3289:265943] 8---82017-12-04 17:15:14.816 DownImage[3289:265944] 9---92017-12-04 17:15:14.816 DownImage[3289:261033] end

從上兩次輸出可以看出,end確實是在所有網絡請求之后才輸出出來,這也是符合了我們的需求。

代碼中我們只添加了4行代碼

dispatch_group_t downloadGroup = dispatch_group_create();dispatch_group_enter(downloadGroup);dispatch_group_leave(downloadGroup);dispatch_group_notify(downloadGroup, dispatch_get_main_queue(), ^{ });

對以上4行代碼可理解為:創建一個dispatch_group_t, 每次網絡請求前先dispatch_group_enter,請求回調后再dispatch_group_leave,對于enter和leave必須配合使用,有幾次enter就要有幾次leave,否則group會一直存在。當所有enter的block都leave后,會執行dispatch_group_notify的block。

3.使用GCD的信號量dispatch_semaphore_t

//3.semaphore UIButton *Btn3 = [UIButton buttonWithType:UIButtonTypeCustom]; Btn3.frame = CGRectMake(100, 300, 100, 40); Btn3.backgroundColor = [UIColor grayColor]; [Btn3 setTitle:@"semaphore" forState:UIControlStateNormal]; [Btn3 addTarget:self action:@selector(Btn3) forControlEvents:UIControlEventTouchUpInside]; [self.view addSubview:Btn3];
//3.semaphore---(void)Btn3{ NSString *str = @"http://www.jianshu.com/p/6930f335adba"; NSURL *url = [NSURL URLWithString:str]; NSURLRequest *request = [NSURLRequest requestWithURL:url]; NSURLSession *session = [NSURLSession sharedSession];  dispatch_semaphore_t sem = dispatch_semaphore_create(0); for (int i=0; i<10; i++) {  NSURLSessionDataTask *task = [session dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {    NSLog(@"%d---%d",i,i);  count++;  if (count==10) {  dispatch_semaphore_signal(sem);  count = 0;  }   }];  [task resume]; } dispatch_semaphore_wait(sem, DISPATCH_TIME_FOREVER);  dispatch_async(dispatch_get_main_queue(), ^{ NSLog(@"end"); });}

運行看看控制臺輸出:

2017-12-04 17:36:49.098 DownImage[3428:283651] 2---22017-12-04 17:36:49.144 DownImage[3428:284210] 0---02017-12-04 17:36:49.152 DownImage[3428:284213] 3---32017-12-04 17:36:49.158 DownImage[3428:283651] 1---12017-12-04 17:36:49.167 DownImage[3428:284210] 4---42017-12-04 17:36:49.235 DownImage[3428:284213] 8---82017-12-04 17:36:49.249 DownImage[3428:283651] 5---52017-12-04 17:36:49.252 DownImage[3428:283651] 7---72017-12-04 17:36:49.324 DownImage[3428:283651] 9---92017-12-04 17:36:49.468 DownImage[3428:284214] 6---62017-12-04 17:36:49.469 DownImage[3428:283554] end
2017-12-04 17:37:11.554 DownImage[3428:284747] 0---02017-12-04 17:37:11.555 DownImage[3428:284733] 1---12017-12-04 17:37:11.627 DownImage[3428:284748] 5---52017-12-04 17:37:11.661 DownImage[3428:284748] 2---22017-12-04 17:37:11.688 DownImage[3428:284747] 4---42017-12-04 17:37:11.709 DownImage[3428:284747] 6---62017-12-04 17:37:11.770 DownImage[3428:284733] 7---72017-12-04 17:37:11.774 DownImage[3428:284733] 8---82017-12-04 17:37:11.824 DownImage[3428:284747] 9---92017-12-04 17:37:11.899 DownImage[3428:284733] 3---32017-12-04 17:37:11.900 DownImage[3428:283554] end

從輸出可以看出,這樣的方法也是滿足我們的需求的,在這個方法中,我們使用了

dispatch_semaphore_t sem = dispatch_semaphore_create(0);dispatch_semaphore_signal(sem);dispatch_semaphore_wait(sem, DISPATCH_TIME_FOREVER);

對這三句代碼可以這樣理解:dispatch_semaphore信號量為基于計數器的一種多線程同步機制。如果semaphore計數大于等于1,計數-1,返回,程序繼續運行。如果計數為0,則等待。dispatch_semaphore_signal(semaphore)為計數+1操作,dispatch_semaphore_wait(sema, DISPATCH_TIME_FOREVER)為設置等待時間,這里設置的等待時間是一直等待。

對于以上代碼通俗一點就是,開始為0,等待,等10個網絡請求都完成了,dispatch_semaphore_signal(semaphore)為計數+1,然后計數-1返回,程序繼續執行。 (這里也就是為什么有個count變量的原因,記錄網絡回調的次數,回調10次之后再發信號量,使后面程序繼續運行)。

4.考慮新需求,10個網絡請求順序回調。

需求需要順序回調,即執行完第一個網絡請求后,第二個網絡請求回調才可被執行,簡單來講就是輸出得是0,1,2,3...9這種方式的。

對于這個需求我也是根據自己最近做的項目來提的,因為網絡請求回調的異步性,我們雖可以控制網絡請求的順序執行,卻不能控制它的完成回調順序。這就有點傷了,目前我項目是找到了解決方案,但這個問題還沒有找到解決辦法,提出來跟大家討論一下。(請忽略網絡請求執行,回調,在回調里請求下一個接口的辦法,討論還有沒有別的方法,最好show the code).

最后,貼點NSOperation的代碼,為了解決新需求所寫,由于網絡請求回調異步性不能滿足需求,但若不是網絡請求等異步回調的方式,這樣的做法是可以的,大家可以試試.

//4.NSOperation UIButton *Btn4 = [UIButton buttonWithType:UIButtonTypeCustom]; Btn4.frame = CGRectMake(100, 400, 100, 40); Btn4.backgroundColor = [UIColor grayColor]; [Btn4 setTitle:@"NSOperation" forState:UIControlStateNormal]; [Btn4 addTarget:self action:@selector(Btn4) forControlEvents:UIControlEventTouchUpInside]; [self.view addSubview:Btn4];
//4.NSOperation-(void)Btn4{ NSString *str = @"http://www.jianshu.com/p/6930f335adba"; NSURL *url = [NSURL URLWithString:str]; NSURLRequest *request = [NSURLRequest requestWithURL:url]; NSURLSession *session = [NSURLSession sharedSession];  NSMutableArray *operationArr = [[NSMutableArray alloc]init]; for (int i=0; i<10; i++) {  NSBlockOperation *operation = [NSBlockOperation blockOperationWithBlock:^{   NSURLSessionDataTask *task = [session dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {        NSLog(@"%d---%d",i,i);       }];      [task resume];   //非網絡請求   NSLog(@"noRequest-%d",i);  }];    [operationArr addObject:operation];  if (i>0) {   NSBlockOperation *operation1 = operationArr[i-1];   NSBlockOperation *operation2 = operationArr[i];   [operation2 addDependency:operation1];  } }  NSOperationQueue *queue = [[NSOperationQueue alloc]init]; [queue addOperations:operationArr waitUntilFinished:NO]; //YES會阻塞當前線程#warning - 絕對不要在應用主線程中等待一個Operation,只能在第二或次要線程中等待。阻塞主線程將導致應用無法響應用戶事件,應用也將表現為無響應。 }

運行結果:

2017-12-04 18:03:10.224 DownImage[3584:304363] noRequest-02017-12-04 18:03:10.226 DownImage[3584:304362] noRequest-12017-12-04 18:03:10.226 DownImage[3584:304363] noRequest-22017-12-04 18:03:10.231 DownImage[3584:304363] noRequest-32017-12-04 18:03:10.232 DownImage[3584:304362] noRequest-42017-12-04 18:03:10.233 DownImage[3584:304362] noRequest-52017-12-04 18:03:10.233 DownImage[3584:304363] noRequest-62017-12-04 18:03:10.234 DownImage[3584:304363] noRequest-72017-12-04 18:03:10.235 DownImage[3584:304363] noRequest-82017-12-04 18:03:10.236 DownImage[3584:304363] noRequest-92017-12-04 18:03:10.408 DownImage[3584:304597] 2---22017-12-04 18:03:10.408 DownImage[3584:304597] 0---02017-12-04 18:03:10.409 DownImage[3584:304597] 1---12017-12-04 18:03:10.461 DownImage[3584:304597] 5---52017-12-04 18:03:10.476 DownImage[3584:304363] 4---42017-12-04 18:03:10.477 DownImage[3584:304365] 6---62017-12-04 18:03:10.518 DownImage[3584:304365] 7---72017-12-04 18:03:10.537 DownImage[3584:304596] 8---82017-12-04 18:03:10.547 DownImage[3584:304362] 9---92017-12-04 18:03:11.837 DownImage[3584:304362] 3---3
2017-12-04 18:04:27.699 DownImage[3584:306401] noRequest-02017-12-04 18:04:27.700 DownImage[3584:306405] noRequest-12017-12-04 18:04:27.701 DownImage[3584:306401] noRequest-22017-12-04 18:04:27.701 DownImage[3584:306405] noRequest-32017-12-04 18:04:27.702 DownImage[3584:306401] noRequest-42017-12-04 18:04:27.702 DownImage[3584:306405] noRequest-52017-12-04 18:04:27.703 DownImage[3584:306401] noRequest-62017-12-04 18:04:27.703 DownImage[3584:306401] noRequest-72017-12-04 18:04:27.704 DownImage[3584:306401] noRequest-82017-12-04 18:04:27.704 DownImage[3584:306401] noRequest-92017-12-04 18:04:27.772 DownImage[3584:306397] 2---22017-12-04 18:04:27.779 DownImage[3584:306401] 0---02017-12-04 18:04:27.782 DownImage[3584:306409] 1---12017-12-04 18:04:27.800 DownImage[3584:306405] 3---32017-12-04 18:04:27.851 DownImage[3584:306401] 6---62017-12-04 18:04:27.855 DownImage[3584:306397] 5---52017-12-04 18:04:27.915 DownImage[3584:306397] 7---72017-12-04 18:04:27.951 DownImage[3584:306397] 9---92017-12-04 18:04:27.953 DownImage[3584:306405] 8---82017-12-04 18:04:28.476 DownImage[3584:306409] 4---4

5.還是使用信號量semaphore完成4的需求

//5.semaphore---order UIButton *Btn5 = [UIButton buttonWithType:UIButtonTypeCustom]; Btn5.frame = CGRectMake(100, 500, 100, 40); Btn5.backgroundColor = [UIColor grayColor]; [Btn5 setTitle:@"order" forState:UIControlStateNormal]; [Btn5 addTarget:self action:@selector(Btn5) forControlEvents:UIControlEventTouchUpInside]; [self.view addSubview:Btn5];
//5.semaphore--order-(void)Btn5{ NSString *str = @"http://www.jianshu.com/p/6930f335adba"; NSURL *url = [NSURL URLWithString:str]; NSURLRequest *request = [NSURLRequest requestWithURL:url]; NSURLSession *session = [NSURLSession sharedSession]; dispatch_semaphore_t sem = dispatch_semaphore_create(0); for (int i=0; i<10; i++) {  NSURLSessionDataTask *task = [session dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {      NSLog(@"%d---%d",i,i);   dispatch_semaphore_signal(sem);  }];  [task resume];  dispatch_semaphore_wait(sem, DISPATCH_TIME_FOREVER); } dispatch_async(dispatch_get_main_queue(), ^{  NSLog(@"end"); });}

我們看看運行結果:

2017-12-05 10:17:28.175 DownImage[938:51296] 0---02017-12-05 10:17:28.331 DownImage[938:51289] 1---12017-12-05 10:17:28.506 DownImage[938:51289] 2---22017-12-05 10:17:28.563 DownImage[938:51289] 3---32017-12-05 10:17:28.662 DownImage[938:51289] 4---42017-12-05 10:17:28.733 DownImage[938:51296] 5---52017-12-05 10:17:28.792 DownImage[938:51296] 6---62017-12-05 10:17:28.856 DownImage[938:51286] 7---72017-12-05 10:17:29.574 DownImage[938:51289] 8---82017-12-05 10:17:29.652 DownImage[938:51286] 9---92017-12-05 10:17:29.653 DownImage[938:45252] end
2017-12-05 10:17:46.341 DownImage[938:51608] 0---02017-12-05 10:17:47.967 DownImage[938:51607] 1---12017-12-05 10:17:48.038 DownImage[938:51603] 2---22017-12-05 10:17:48.132 DownImage[938:51603] 3---32017-12-05 10:17:48.421 DownImage[938:51608] 4---42017-12-05 10:17:48.537 DownImage[938:51289] 5---52017-12-05 10:17:48.646 DownImage[938:51289] 6---62017-12-05 10:17:48.939 DownImage[938:51289] 7---72017-12-05 10:17:50.537 DownImage[938:51607] 8---82017-12-05 10:17:50.615 DownImage[938:51289] 9---92017-12-05 10:17:50.616 DownImage[938:45252] end

我們對比 3 的代碼,3 中我們只在最后也就是循環結束后調用dispatch_semaphore_wait(sem, DISPATCH_TIME_FOREVER) ,循環中當網絡請求回調10次(也就是都回調完)后,使傳入的信號量加1:( dispatch_semaphore_signal(sem) ) ,這時等待結束,然后進行后續的操作。

在這個方法里,我們每一次遍歷,都讓其dispatch_semaphore_wait(sem, DISPATCH_TIME_FOREVER) ,這個時候線程會等待,阻塞當前線程,直到dispatch_semaphore_signal(sem)調用之后,而我們dispatch_semaphore_signal(sem)是在網絡請求的回調里調用的,所以這個方法的邏輯是:

遍歷—>發起任務—>等待—>任務完成信號量加1—>等待結束,開始下一個任務

發起任務—>等待—>任務完成信號量加1—>等待結束,開始下一個任務

發起任務—>等待—>任務完成信號量加1—>等待結束,開始下一個任務

這樣循環的模式,一個任務完成才能接著去做下面的任務,滿足我們的需求。

但我們也要發現這樣一個問題,我們使用這種方式,可以明顯感覺出整個過程需要花費的時間大大增加了,不像我們 3 中同時(幾乎)開啟任務等待完成回調,這里是一個網絡請求發出,等待,完成后發出第二個網絡請求,等待,完成后再發出第三個,這樣我們等待的時間是10個網絡請求每一個回調時間的和,在時間上大大增加了消耗,而且對于dispatch_semaphore_wait(sem, DISPATCH_TIME_FOREVER) ,它是會阻塞線程的,我們如果需要在網絡請求完成后修改UI,那這種方式會影響我們的界面交互,接下來我們對比一下兩者時間消耗:

3-------------3----------3-------2017-12-05 10:29:51.178 DownImage[938:56971] 2---22017-12-05 10:29:51.193 DownImage[938:57200] 0---02017-12-05 10:29:51.202 DownImage[938:56631] 3---32017-12-05 10:29:51.248 DownImage[938:56971] 1---12017-12-05 10:29:51.262 DownImage[938:56971] 5---52017-12-05 10:29:51.291 DownImage[938:56631] 6---62017-12-05 10:29:51.375 DownImage[938:56631] 7---72017-12-05 10:29:51.384 DownImage[938:56631] 4---42017-12-05 10:29:51.434 DownImage[938:56971] 8---82017-12-05 10:29:51.487 DownImage[938:57199] 9---92017-12-05 10:29:51.488 DownImage[938:45252] end5-------------5----------5-------2017-12-05 10:29:52.190 DownImage[938:56631] 0---02017-12-05 10:29:52.304 DownImage[938:57199] 1---12017-12-05 10:29:52.432 DownImage[938:56971] 2---22017-12-05 10:29:52.520 DownImage[938:56971] 3---32017-12-05 10:29:52.576 DownImage[938:56631] 4---42017-12-05 10:29:52.628 DownImage[938:56971] 5---52017-12-05 10:29:52.706 DownImage[938:56631] 6---62017-12-05 10:29:52.764 DownImage[938:56971] 7---72017-12-05 10:29:52.853 DownImage[938:56631] 8---82017-12-05 10:29:52.925 DownImage[938:56971] 9---92017-12-05 10:29:52.926 DownImage[938:45252] end

看得出3花費時間為51.488 - 51.178約300多ms

--- ---5花費時間為52.926 - 52.190約700多ms

所以大家還請謹慎使用。

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對VEVB武林網的支持。


注:相關教程知識閱讀請移步到IOS開發頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
丰满岳妇乱一区二区三区| 亚洲性线免费观看视频成熟| 国内精品视频一区| 69精品小视频| 欧美视频不卡中文| 欧美激情第1页| 精品毛片网大全| 欧美一级高清免费| 国产99视频在线观看| www.日韩免费| 国产精品精品一区二区三区午夜版| 成人免费观看网址| 国产精品久久久久久av下载红粉| 91久久国产综合久久91精品网站| 久久久免费在线观看| 久久精品视频99| 国产精品最新在线观看| 国产亚洲精品va在线观看| 国产精品欧美一区二区三区奶水| 在线播放国产一区中文字幕剧情欧美| 日本精品视频网站| 欧美日韩亚洲精品一区二区三区| 国产欧美va欧美va香蕉在| 成人www视频在线观看| 国产欧美日韩亚洲精品| 国产在线观看91精品一区| 精品中文字幕在线2019| 一区二区三区精品99久久| 成人精品久久久| 91亚洲精品久久久久久久久久久久| 精品小视频在线| 色狠狠av一区二区三区香蕉蜜桃| 国内精品模特av私拍在线观看| 欧美日韩免费在线观看| 精品电影在线观看| 欧美精品免费在线观看| 伦伦影院午夜日韩欧美限制| 国产精品欧美一区二区三区奶水| 亚洲一区亚洲二区亚洲三区| 亚洲色图av在线| 国产情人节一区| 欧美一级黄色网| 欧美性高潮在线| 国产亚洲视频在线观看| 视频在线一区二区| 国产精品无码专区在线观看| 亚洲第一精品夜夜躁人人爽| 亚洲精品v欧美精品v日韩精品| 欧美国产亚洲精品久久久8v| 亚洲午夜女主播在线直播| 亚洲国产97在线精品一区| 日韩在线视频播放| 亚洲国产精品网站| 中文字幕视频一区二区在线有码| 久久久久亚洲精品| 国产精自产拍久久久久久| 久久精品亚洲热| 中文综合在线观看| 欧美精品videossex88| 国产精品mp4| 欧美性猛交xxxx免费看久久久| 日韩av中文字幕在线免费观看| 国产亚洲欧美视频| 欧美精品免费在线观看| 国产日韩精品一区二区| 欧美精品videofree1080p| 国产精品久久久久99| 91久久久国产精品| 久久久精品网站| 777777777亚洲妇女| 国产热re99久久6国产精品| 亚洲男子天堂网| 国产成人一区二区三区小说| 久久久久久久久国产精品| 欧美性xxxxx| 欧美日韩成人黄色| 日产日韩在线亚洲欧美| 成人欧美在线观看| 热久久美女精品天天吊色| 欧美视频不卡中文| 午夜精品一区二区三区视频免费看| 国产精品日韩一区| 成人精品一区二区三区电影免费| 亚洲午夜未满十八勿入免费观看全集| 欧美影院在线播放| 日韩美女写真福利在线观看| 欧美日韩在线免费| 国产欧美在线视频| 日本欧美一二三区| 91国产精品91| 欧美日韩国产精品专区| 亚洲免费影视第一页| 欧美视频二区36p| 日韩av综合中文字幕| 亚洲综合日韩中文字幕v在线| 奇门遁甲1982国语版免费观看高清| 亚洲欧美日韩天堂一区二区| 亚洲性日韩精品一区二区| 91久久国产精品91久久性色| 欧美性xxxx18| 亚洲自拍在线观看| 成人国产精品久久久| 欧美一区二区三区四区在线| 91成人天堂久久成人| 精品日本高清在线播放| 日韩av手机在线观看| 精品夜色国产国偷在线| 中文欧美日本在线资源| 久久精品国产成人精品| 97视频免费看| 91精品视频网站| 中文字幕日韩在线视频| 福利精品视频在线| 久久的精品视频| 国内久久久精品| 亚洲免费视频在线观看| 欧美激情一级欧美精品| 国产成人一区三区| 国产精品一区二区女厕厕| 成人伊人精品色xxxx视频| 成人免费淫片视频软件| 国产97在线|日韩| 91九色在线视频| 日韩精品视频在线观看免费| 国产精品免费小视频| 国产一区二区香蕉| 欧美成人精品不卡视频在线观看| 欧美一区二区三区精品电影| 色爱精品视频一区| 国产精品一区二区久久国产| 国产日韩欧美视频在线| 亚洲电影免费观看高清完整版在线观看| 国产精品自产拍在线观看中文| 久久国产精品亚洲| 欧美精品第一页在线播放| 欧洲精品久久久| 日韩av在线一区| 亚洲男人天天操| 国产精品久久久久久久久久| 国产一区二区成人| 日韩av在线免费| 亚洲国产91精品在线观看| 欧美日韩一区二区免费视频| 国产成人涩涩涩视频在线观看| 91极品视频在线| 亚洲高清色综合| 久久影视电视剧凤归四时歌| 日韩中文字幕在线观看| 国产精品高潮呻吟久久av野狼| 欧美精品电影免费在线观看| 欧美在线视频免费| 亚洲va欧美va在线观看| 日韩精品中文字幕有码专区| 欧美黑人狂野猛交老妇| 久久久精品视频成人| 日本人成精品视频在线| 亚洲第一网站男人都懂| 高跟丝袜一区二区三区| 98精品国产高清在线xxxx天堂| 精品中文字幕在线| 91精品久久久久久久久久另类| 国产精品美女网站| 欧美成人小视频| 欧美精品免费在线观看|