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

iOS網絡加載圖片緩存策略之ASIDownloadCache緩存優化

移動開發 iOS
在我們實際工程中,很多情況需要從網絡上加載圖片,然后將圖片在imageview中顯示出來,但每次都要從網絡上請求,會嚴重影響用戶體驗,為了不是每次顯示都需要從網上下載數據,希望將圖片放到本地緩存,因此我們需要一個好的的緩存策略,今天我將我在項目工程中的實際經驗分享給大家,我這里主要介紹一下強大的ASIHTTPRequest的緩存策略,以及使用方法。

在我們實際工程中,很多情況需要從網絡上加載圖片,然后將圖片在imageview中顯示出來,但每次都要從網絡上請求,會嚴重影響用戶體驗,為了不是每次顯示都需要從網上下載數據,希望將圖片放到本地緩存,因此我們需要一個好的的緩存策略,今天我將我在項目工程中的實際經驗分享給大家,我這里主要介紹一下強大的ASIHTTPRequest的緩存策略,以及使用方法:

下面是具體步驟:

一、設置緩存策略

首先在SplitDemoAppDelegate委托代理中,實現如下代碼:

在SplitDemoAppDelegate.h文件中,代碼如下:

  1. #import <UIKit/UIKit.h> 
  2.  
  3.   @class ASIDownloadCache; 
  4.   
  5.  @interface SplitDemoAppDelegate : NSObject <UIApplicationDelegate,UITabBarControllerDelegate> { 
  6.   
  7.     UIWindow *_window; 
  8.  
  9.      ASIDownloadCache*_downloadCache;            //下載緩存策略 
  10.   
  11.  } 
  12.  
  13.  @property (nonatomic, retain) ASIDownloadCache*downloadCache; 
  14.  
  15.  @end 

在SplitDemoAppDelegate.m文件中,代碼如下:

  1. #import "SplitDemoAppDelegate.h" 
  2.  
  3. @implementation SplitDemoAppDelegate 
  4.   
  5.   @synthesize window=_window; 
  6.  
  7. @synthesize downloadCache = _downloadCache; 
  8.  
  9.  - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary*)launchOptions 
  10.   
  11.  { 
  12.  
  13.     //初始化ASIDownloadCache緩存對象 
  14.   
  15.    ASIDownloadCache *cache = [[ASIDownloadCache alloc] init]; 
  16.  
  17.     self.downloadCache = cache; 
  18.   
  19.    [cache release]; 
  20.  
  21.  
  22.     //路徑 
  23.   
  24.     NSArray *paths =NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES); 
  25.  
  26.   NSString *documentDirectory = [paths objectAtIndex:0]; 
  27.   
  28.     //設置緩存存放路徑 
  29.   
  30.    [self.downloadCache setStoragePath:[documentDirectorystringByAppendingPathComponent:@"resource"]]; 
  31.   
  32.     //設置緩存策略 
  33.   
  34.      [self.downloadCache setDefaultCachePolicy:ASIOnlyLoadIfNotCachedCachePolicy]; 
  35.   
  36.      // Override point for customization after application launch. 
  37.   
  38.      [self.window makeKeyAndVisible]; 
  39.  
  40.     return YES; 
  41.  
  42.  } 
  43.   
  44.  
  45.  - (void)dealloc 
  46.  
  47.   
  48.      [_window release]; 
  49.   
  50.      [_downloadCache release]; 
  51.   
  52.     [super dealloc]; 
  53.   
  54.  } 
  55.   
  56.  @end 

二、創建緩存線程

這一步是創建一個NSOperation類,實現緩存的方法,代碼如下:

ResourceContainer.h文件實現:

  1. #import <Foundation/Foundation.h> 
  2.   
  3.   #import "ASIHTTPRequest.h" 
  4.   
  5. #import "SplitDemoAppDelegate.h" 
  6.  
  7.  @interface ResourceContainer : NSOperation { 
  8.  
  9. NSURL*_resourceURL;            //資源請求url 
  10.   
  11.  NSObject*_hostObject;              
  12.  
  13.  SEL_resourceDidReceive;      //資源接手響應方法   
  14.  
  15.  SplitDemoAppDelegate*_appDelegate;            //應用委托對象 
  16.   
  17.  ASIHTTPRequest*_httpRequest;             
  18.   
  19.  UIImageView*_imageView;               
  20.  
  21.  } 
  22.   
  23.  
  24.  
  25.  @property (nonatomic, retain) NSURL*resourceURL; 
  26.  
  27. @property (nonatomic, retain) NSObject*hostObject; 
  28.  
  29.  @property (nonatomic, assign) SELresourceDidReceive; 
  30.   
  31.  @property (nonatomic, assign) SplitDemoAppDelegate   *appDelegate; 
  32.   
  33.  @property (nonatomic, retain) ASIHTTPRequest*httpRequest; 
  34.  
  35.  @property (nonatomic, retain) UIImageView*imageView; 
  36.  
  37.    
  38.  
  39.  //http請求回調方法 
  40.  
  41.  -(void)didStartHttpRequest:(ASIHTTPRequest *)request; 
  42.   
  43.  -(void)didFinishHttpRequest:(ASIHTTPRequest *)request; 
  44.  
  45.  -(void)didFailedHttpRequest:(ASIHTTPRequest *)request; 
  46.   
  47.   
  48.  
  49. //取消資源請求 
  50.  
  51.  -(void)cancelReourceGet; 
  52.   
  53.  //資源接收回調方法 
  54.  
  55.  -(void)resourceDidReceive:(NSData *)resource; 
  56.  
  57.  @end 

ResourceContainer.m文件實現:

  1. #import "ResourceContainer.h" 
  2.    #import "HttpConstant.h" 
  3.   #import "ASIDownloadCache.h" 
  4.  @implementation ResourceContainer 
  5.  @synthesize resourceURL = _resourceURL; 
  6.    @synthesize hostObject = _hostObject; 
  7.   @synthesize resourceDidReceive = _resourceDidReceive; 
  8.  @synthesize appDelegate = _appDelegate; 
  9.    @synthesize httpRequest = _httpRequest; 
  10.  @synthesize imageView = _imageView; 
  11.    
  12.   -(id)init{ 
  13.   
  14.       if(self == [super init]){ 
  15.    
  16.      self.appDelegate = (SplitDemoAppDelegate *)[[UIApplication        sharedApplication] delegate]; 
  17.   
  18.        } 
  19.   
  20.     return self; 
  21.    
  22.   } 
  23.    
  24.    
  25.   -(void)main{ 
  26.   
  27.       if(self.hostObject == nil) 
  28.       return
  29.    
  30.      if(self.resourceURL == nil){ 
  31.             [self resourceDidReceive:nil]; 
  32.            return
  33.       } 
  34.    
  35.        ASIHTTPRequest *request = [ASIHTTPRequest     requestWithURL:self.resourceURL] 
  36.       self.httpRequest = request; 
  37.  
  38.    
  39.   
  40.  [self.httpRequest setDownloadCache:self.appDelegate.downloadCache]; 
  41.   [self.httpRequest setDelegate:self]; 
  42.   [self.httpRequest setDidStartSelector:@selector(didStartHttpRequest:)]; 
  43.   [self.httpRequest setDidFinishSelector:@selector(didFinishHttpRequest:)]; 
  44.  [self.httpRequest setDidFailSelector:@selector(didFailedHttpRequest:)]; 
  45.  
  46.      //發異步請求 
  47.    
  48.  [self.httpRequest startAsynchronous]; 
  49.   
  50.  } 
  51.    
  52.  - (void)dealloc { 
  53.    
  54.  [_resourceURL release]; 
  55.  [_hostObject release]; 
  56.  [_httpRequest release]; 
  57.  [_imageView release]; 
  58.   [super dealloc]; 
  59.   
  60.  
  61.  //開始請求 
  62.  
  63.  -(void)didStartHttpRequest:(ASIHTTPRequest *)request{ 
  64.   
  65.   [[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:YES]; 
  66.  
  67.   } 
  68.  
  69.   //請求成功返回處理結果 
  70.  
  71.   -(void)didFinishHttpRequest:(ASIHTTPRequest *)request{ 
  72.   
  73.  [[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:NO]; 
  74.   
  75.    
  76.  
  77.      if([request responseStatusCode] == 200 || [request responseStatusCode] == 304){ 
  78.  
  79.  //判斷是否來自緩存 
  80.  
  81.          if([request didUseCachedResponse]){ 
  82.   
  83.   NSLog(@"=========資源請求:%@ 來自緩存============",[self.resourceURL absoluteURL]); 
  84.    
  85.         } 
  86.          else
  87.              NSLog(@"=========資源請求:圖片不來自緩存============"); 
  88.         } 
  89.   
  90.   
  91.       [self resourceDidReceive:[request responseData]]; 
  92.  
  93.  } 
  94.   
  95.  else { 
  96.  
  97.         [self resourceDidReceive:nil]; 
  98.  
  99.         } 
  100.  
  101.   
  102.  //失敗請求返回處理結果 
  103.  
  104.  -(void)didFailedHttpRequest:(ASIHTTPRequest *)request{ 
  105.  
  106. [[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:NO]; 
  107.   
  108.  [self resourceDidReceive:nil]; 
  109.  
  110.  
  111. //取消資源請求 
  112.  
  113.  -(void)cancelReourceGet{ 
  114.  
  115.  [self.httpRequest cancel]; 
  116.  
  117.  } 
  118.  
  119.  //資源接收處理方法 
  120.  
  121.  -(void)resourceDidReceive:(NSData *)resource{ 
  122.  
  123.  if([self.hostObject respondsToSelector:self.resourceDidReceive]){ 
  124.  
  125.  if(resource != nil && self.imageView != nil){ 
  126.  
  127.  self.imageView.image = [UIImage imageWithData:resource]; 
  128.  
  129.  
  130.   
  131.  [self.hostObject performSelectorOnMainThread:self.resourceDidReceive withObject:self.imageViewwaitUntilDone:NO]; 
  132.   
  133.   
  134.  } 
  135.  
  136.  @end  

到第二步,我們的緩存策略的設置,以及資源請求和接收數據方法已經構建完畢,下面介紹一下如何使用我們上面創建的NSOperation類

三、圖片請求(利用上面創建的類)

這里以我的工程為例進行分析:

在DetailViewController.h聲明文件中:

  1. #import <UIKit/UIKit.h> 
  2.   
  3.   @interface DetailViewController :UIViewController { 
  4.   
  5.     NSURL                         *_imageURL;                    //圖片url 
  6.   
  7.     NSMutableArray            *_originalIndexArray;        //保存請求圖片的號 
  8.  
  9.     NSMutableDictionary     *_originalOperationDic;     //保存圖片請求隊列 
  10.  
  11.     NSOperationQueue        *_requestImageQueue;    //圖片請求隊列 
  12.  
  13.  
  14. @property (nonatomic, retain) NSURL                       *imageURL; 
  15.  @property (nonatomic, retain) NSMutableArray          *originalIndexArray; 
  16.  @property (nonatomic, retain) NSMutableDictionary   *originalOperationDic; 
  17.  @property (nonatomic, retain) NSOperationQueue      * requestImageQueue; 
  18.  
  19.  //顯示圖片信息 
  20.   
  21.  -(void)displayProductImage; 
  22.   
  23. //根據圖片序號顯示請求圖片資源 
  24.   
  25.  -(void)displayImageByIndex:(NSInteger)index ByImageURL:(NSURL *)url; 
  26.   
  27.  //處理圖片請求返回信息 
  28.  
  29.  -(void)imageDidReceive:(UIImageView *)imageView; 
  30.  
  31.  @end 

在DetailViewController.m實現文件中:

  1. #import "ProductDetailViewController.h" 
  2.    
  3.   //這里引入在第二步中,我們創建的對象 
  4.   #import "ResourceContainer.h" 
  5.   
  6.   @implementation DetailViewController 
  7.    @synthesize imageURL = _imageURL; 
  8.   @synthesize originalIndexArray = _originalIndexArray; 
  9.   @synthesize originalOperationDic = _originalOperationDic; 
  10.  @synthesize requestImageQueue = _requestImageQueue; 
  11.  
  12.   
  13.  - (void)viewDidLoad 
  14.  
  15.  { 
  16.   
  17.     [super viewDidLoad]; 
  18.       NSOperationQueue *tempQueue = [[NSOperationQueue alloc] init]; 
  19.   
  20.       self.requsetImageQueue = tempQueue; 
  21.       [tempQueue release]; 
  22.   
  23.        NSMutableArray *array = [[NSMutableArray alloc] init]; 
  24.  
  25.        self.originalIndexArray = array; 
  26.       [array release]; 
  27.   
  28.         NSMutableDictionary *dic = [[NSMutableDictionary alloc] init]; 
  29.    
  30.         self.originalOperationDic = dic; 
  31.          [dic release]; 
  32.    
  33.   } 
  34.    
  35.  //顯示圖片信息 
  36.    
  37.   -(void)displayProductImage 
  38.   
  39.   { 
  40.   
  41.      NSURL *url = [NSURL URLWithString:@"http://xxx.xxx.xxx.xxx"]; 
  42.  
  43.       //這個是從器返回有圖片數目,self.xxxx根據具體的場合 
  44.    
  45.       int imageCount = [self.xxxx.imageNum intValue]; 
  46.    
  47.       for (int i=0; i<imageCount; i++) { 
  48.    
  49.           NSString *str1 = @"這里是拼圖片請求url,根據實際需求"
  50.   
  51.          self.imageURL = [url URLByAppendingPathComponent:str1]; 
  52.   
  53.          //根據圖片號請求資源 
  54.   
  55.          [self displayImageByIndex:i ByImageURL:self.productImageURL]; 
  56.    
  57.      } 
  58.  
  59.  } 
  60.  
  61.   //根據圖片序號顯示請求圖片資源 
  62.   
  63. -(void) displayImageByIndex:(NSInteger)index ByImageURL:(NSURL *)url 
  64.   
  65.   { 
  66.   
  67.     NSString *indexForString = [NSString stringWithFormat:@"%d",index]; 
  68.   
  69.       //若數組中已經存在該圖片編號,說明圖片加載完畢,直接返回 
  70.  
  71.     if ([self.originalIndexArray containsObject:indexForString]) { 
  72.   
  73.          return
  74.  
  75.      } 
  76.  
  77.      //創建UIImageView對象 
  78.   
  79.     UIImageView *imageView = [[UIImageView alloc] init]; 
  80.  
  81.      imageView.tag = index; 
  82.    
  83.     //創建資源請求對象 
  84.  
  85.      ResourceContainer  *imageOperation = [[ResourceContainer alloc] init]; 
  86.   
  87.       imageOperation.resourceURL = url; 
  88.  
  89.     imageOperation.hostObject = self; 
  90.  
  91.      //設置收到圖片信息處理理方法 
  92.  
  93.      imageOperation.resourceDidReceive = @selector(imageDidReceive:); 
  94.   
  95.     imageOperation.imageView = imageView; 
  96.   
  97.     [imageView release]; 
  98.  
  99.      //將圖片請求對象加入圖片請求隊列中 
  100.  
  101.     [self.requsetImageQueue addOperation:imageOperation]; 
  102.  
  103.     [self.originalOperationDic setObject:imageOperation forKey:indexForString]; 
  104.  
  105.     [imageOperation release]; 
  106.  
  107.   
  108. //處理圖片請求返回信息 
  109.  
  110.  -(void)imageDidReceive:(UIImageView *)imageView 
  111.  
  112.  { 
  113.  
  114.      if (imageView == nil||imageView.image == nil) { 
  115.  
  116.             imageView.image = [UIImage imageNamed:@"no-pic-300-250.png"]; 
  117.  
  118.      } 
  119.   
  120.      //將圖片信息加載到前臺,self.openFlowView是我用的coverFlow,coverFlow的使用方法網上很多,自己找吧 
  121.  
  122.      [self.openFlowView setImage:imageView.image forIndex:imageView.tag]; 
  123.  
  124.     [self.originalIndexArray addObject:[NSString stringWithFormat:@"%d",imageView.tag]]; 
  125.  
  126.     [self.originalOperationDic removeObjectForKey:[NSString stringWithFormat:@"%d",imageView.tag]]; 
  127.  
  128.  } 
  129.  
  130. - (void)dealloc 
  131.  
  132.  { 
  133.       [_requestImageQueue release]; 
  134.   
  135.      [_originalIndexArray release]; 
  136.  
  137.      [_originalOperationDic release]; 
  138.  
  139.      [_imageURL release]; 
  140.  
  141.      [super dealloc]; 
  142.  
  143.  
  144. @end 

經過上述步驟,我們實現了加載網絡圖片時緩存功能,增強了用戶體驗效果。代碼中可能會有諸多問題,希望網友指教,有更好的緩存方法,也希望一起交流!

責任編輯:張葉青 來源: 博客
相關推薦

2015-06-11 10:12:26

Android圖片加載緩存

2022-05-10 08:58:56

CacheHTTP

2023-11-16 08:22:14

LruCacheAndroid

2014-04-17 10:56:40

優化策略MySQL緩存

2021-03-29 11:51:07

緩存儲存數據

2011-10-19 09:41:15

ASP.NET性能優化

2020-06-11 13:03:04

性能優化緩存

2019-03-20 09:11:50

Web緩存策略

2011-10-17 09:54:18

ASP.NET性能

2015-10-08 16:40:50

緩存頭像策略

2013-10-16 16:17:15

iOS開發優化方案

2009-08-03 18:47:12

ASP.NET數據緩存

2024-07-23 08:06:19

緩存技術策略

2018-03-27 09:28:33

緩存策略系統

2015-12-16 12:40:32

H5緩存機制移動

2025-02-03 00:00:35

2024-06-28 08:31:54

2020-07-16 08:04:21

瀏覽器緩存策略

2024-05-06 12:20:00

緩存驅逐緩存

2023-05-04 16:10:13

緩存前端
點贊
收藏

51CTO技術棧公眾號

精品成人av| 亚洲欧美一区二区三区在线观看| 九九热这里有精品| 亚洲激情欧美激情| 成人动漫视频在线观看免费| 欧美日韩综合在线观看| 波多野结衣在线观看一区二区| 色综合夜色一区| 中文字幕人成一区| 日本xxxxwww| 奇米色一区二区| 欧美激情精品久久久久久久变态| 久久精品无码专区| 992tv国产精品成人影院| 一区二区三区精品视频在线| 日本在线播放一区| 亚洲精品.www| 美女高潮久久久| 91精品国产沙发| 成人在线观看小视频| 亚洲欧洲av| 精品少妇一区二区三区视频免付费 | 亚洲性视频在线| 欧美性大战久久久久久久蜜臀| 成人精品视频在线播放| 日韩子在线观看| 99热这里都是精品| 91网免费观看| ,一级淫片a看免费| 久久精品伊人| 国外色69视频在线观看| 国产这里有精品| 久久国产小视频| 亚洲欧美另类中文字幕| 日韩欧美国产小视频| 国产青春久久久国产毛片| 国产精品久久久久久久久毛片 | 香蕉综合视频| 亚洲天堂视频在线观看| 香蕉视频黄色在线观看| 日本一区精品视频| 69精品人人人人| 91福利国产成人精品播放| 黄视频免费在线看| 亚洲一区视频在线| 亚洲爆乳无码精品aaa片蜜桃| 69久久夜色| 国产偷国产偷亚洲高清人白洁| 精品午夜一区二区| 五月激情丁香婷婷| 99视频一区二区三区| 国产成人精品一区二区三区福利| a天堂中文在线观看| 国产麻豆精品theporn| 亚洲精品欧美日韩专区| 91国内精品视频| 久久99精品国产| 激情欧美一区二区三区在线观看| 中文字幕亚洲无线码在线一区| 亚洲成人黄色av| 欧美限制电影| 日韩在线视频观看| 青花影视在线观看免费高清| 亚洲成人99| 欧美高清videos高潮hd| 精品无码一区二区三区电影桃花| 黄色成人91| 欧美一级高清免费播放| 国产免费一级视频| 美国三级日本三级久久99| 91免费视频国产| 亚洲欧美黄色片| 97国产一区二区| 三区精品视频| 成人短视频在线观看| 一区二区三区在线视频观看58| 黄色成人在线免费观看| 碰碰在线视频| 欧美视频中文一区二区三区在线观看| 亚洲综合日韩欧美| 日韩一区二区三区高清在线观看| 精品日产卡一卡二卡麻豆| av无码一区二区三区| 狠狠色狠狠色综合婷婷tag| 久久久97精品| 日韩欧美a级片| 美女做暖暖视频免费在线观看全部网址91 | 亚洲第一激情av| 国产日韩一区二区在线观看| 国产亚洲人成a在线v网站 | 亚洲网中文字幕| 国产精品chinese在线观看| 亚洲欧美成人网| 日本黄色片免费观看| 亚洲无毛电影| 国产精品麻豆va在线播放| 国产超碰人人模人人爽人人添| 91在线观看污| 异国色恋浪漫潭| 热三久草你在线| 538prom精品视频线放| 午夜剧场免费看| 久久精品av| 2019精品视频| 国产又黄又粗又长| 91免费看片在线观看| 亚洲自拍偷拍一区二区三区| 理论片午夜视频在线观看| 欧美福利一区二区| 久久久久久久久久久国产精品| 亚洲色图二区| 国产精品免费观看在线| 天天爽夜夜爽夜夜爽| 亚洲色大成网站www久久九九| 亚洲另类中文字| 欧美高清性xxxxhd| 一二三四区在线观看| 欧洲亚洲精品在线| 成人在线电影网站| 影音先锋日韩在线| 国产精品亚洲第一区| 性xxxx搡xxxxx搡欧美| 一区二区欧美精品| 九九热99视频| 欧美日韩一二| 亚洲影院免费观看| 久久精品免费网站| 久久悠悠精品综合网| 久久99国产精品自在自在app | 欧美tk丨vk视频| 激情无码人妻又粗又大| 日一区二区三区| 精品午夜一区二区三区| www在线观看黄色| 精品噜噜噜噜久久久久久久久试看 | 91麻豆精品激情在线观看最新| 中文字幕亚洲激情| 波多野结衣大片| 国产亚洲欧美激情| 久久美女福利视频| 狼人天天伊人久久| 97国产精品免费视频| 人妻丰满熟妇av无码区hd| 亚洲自拍偷拍欧美| 自拍偷拍亚洲区| 波多野结衣办公室33分钟| 亚洲美女黄网| 精品国产第一页| 理论不卡电影大全神| 亚洲精品久久久久久下一站| 国产午夜视频在线| 成人动漫中文字幕| 91免费黄视频| 女仆av观看一区| 国产91精品久久久| 国产在线一二三区| 色噜噜狠狠成人中文综合| 久久婷婷五月综合| 日本午夜一本久久久综合| 亚洲精品一区国产精品| 999精品视频在线观看| 久久在线免费视频| 亚洲第一色视频| 天天操天天干天天综合网| 欧美 日本 国产| 视频一区视频二区在线观看| 亚洲国产欧美一区二区三区不卡| 美女视频一区| 欧美肥老妇视频| 人妻一区二区三区| 色婷婷av一区二区三区软件| 妖精视频在线观看免费| 国产在线一区观看| 亚洲熟妇无码一区二区三区导航| 偷拍一区二区| 国产精品一区av| av免费网站在线| 日韩风俗一区 二区| 国产男人搡女人免费视频| 亚洲色图制服诱惑| www国产视频| 日韩激情av在线| 国产一区一区三区| 羞羞答答一区二区| 成人激情综合网| 99久久精品免费看国产小宝寻花| 亚洲欧美制服第一页| 91av久久久| 欧美日韩精品二区| 欧美巨猛xxxx猛交黑人97人| 国产又粗又大又爽| 一区二区三区鲁丝不卡| 国产精品无码网站| 久久99精品视频| 久久99久久99精品| 日韩av久操| 国产精品综合久久久久久| 69堂精品视频在线播放| 欧美另类在线观看| 国产精品影院在线| 精品国产一区二区三区四区四| 不卡av电影在线| 亚洲免费在线看| 日本一区二区三区网站| 国产老妇另类xxxxx| 国产视频一区二区三区在线播放| 欧美成人高清| 日本中文不卡| 精品福利网址导航| 91久久综合亚洲鲁鲁五月天| 肉色欧美久久久久久久免费看| 久久精品国产精品| 久久99久久| 亚洲国产欧美自拍| 亚洲av无码一区二区三区dv| 欧美图片一区二区三区| 国产精品xxxx喷水欧美| 一级日本不卡的影视| 国产黄a三级三级| 91免费看片在线观看| 在线观看一区二区三区四区| 久久99精品久久只有精品| 波多野结衣天堂| 亚洲少妇在线| 国产精彩视频一区二区| 午夜欧美理论片| 黄瓜视频免费观看在线观看www | 亚洲免费激情视频| 国产免费不卡| 亚洲成人网久久久| jizz国产视频| 337p亚洲精品色噜噜狠狠| 无码人妻精品一区二| 岛国av一区二区三区| 国产精彩视频在线观看| 一区二区三区国产精品| 手机在线免费看片| 国产精品不卡在线| 亚洲一二三四视频| 欧美国产精品专区| 在线观看福利片| 91在线国产观看| 国产ts丝袜人妖系列视频| 不卡av在线网| 国产高清成人久久| 成人黄色在线网站| 亚洲成a人片在线www| 国产91精品久久久久久久网曝门| ass极品水嫩小美女ass| 国产精品亚洲专一区二区三区 | xfplay精品久久| 91精品小视频| 久久综合色播五月| av中文字幕免费观看| 国产日韩欧美亚洲| 性猛交娇小69hd| 国产精品福利影院| 国产大片免费看| 亚洲在线免费播放| 日韩毛片在线播放| 日本韩国欧美国产| 夜夜嗨aⅴ一区二区三区| 91精品午夜视频| 国产 欧美 自拍| 亚洲精品一区二区久| 高清av电影在线观看| 日韩最新在线视频| 午夜羞羞小视频在线观看| 久久乐国产精品| 不卡一二三区| 成人午夜在线观看| 国产精品午夜av| 欧美精品一区二区三区久久| 日韩精品一卡| 91国内精品野花午夜精品| 潮喷失禁大喷水aⅴ无码| 亚洲欧美日韩在线播放| 久久久久久激情| 欧美色播在线播放| 97成人免费视频| 亚洲国产毛片完整版| a√在线中文网新版址在线| 久久高清视频免费| 特黄毛片在线观看| 国产欧美一区二区三区久久人妖| 精品一区二区三区中文字幕视频| 国产精品免费视频一区二区| 精品国产乱码久久久久久蜜坠欲下| 宅男一区二区三区| 99精品国产一区二区青青牛奶| 四季av一区二区| 国产精品主播直播| 欧美多人猛交狂配| 亚洲一区二区三区四区在线| 免费黄色片视频| 精品三级在线观看| 在线观看免费黄视频| 韩国国内大量揄拍精品视频| 国产精品久久久久久久久久齐齐| 99精彩视频| 成人在线免费视频观看| 91精品国产91久久久久麻豆 主演| 三级欧美在线一区| 免费国偷自产拍精品视频| 国产校园另类小说区| 国产精品9191| 91超碰这里只有精品国产| 欧美人体大胆444www| 欧美福利在线观看| 99精品美女视频在线观看热舞| 久久艳妇乳肉豪妇荡乳av| 午夜天堂精品久久久久| 在线观看国产福利| 久久精品这里都是精品| 国产在线观看免费av| 欧美一区国产二区| 一广人看www在线观看免费视频| 91禁国产网站| 9l视频自拍蝌蚪9l视频成人| 中国一区二区三区| 日本不卡的三区四区五区| 亚洲欧美在线不卡| 亚洲一区二区三区免费视频| 国产精品欧美激情在线| 在线观看国产精品日韩av| 中文字幕影音在线| 狠狠爱一区二区三区| 黄色日韩在线| 国产精品99久久久精品无码| 亚洲欧洲av另类| 欧美另类高清videos的特点| 亚洲欧美日本另类| 欧美成人a交片免费看| 免费试看一区| 性欧美精品高清| 国产真实乱人偷精品| 亚洲h动漫在线| 色网站免费观看| 韩国精品久久久999| 99精品中文字幕在线不卡 | 狠狠色综合一区二区| 亚洲高清成人| 国产精品扒开腿做爽爽爽a片唱戏| 一区二区免费看| 国内爆初菊对白视频| 高清欧美性猛交xxxx| 卡通动漫精品一区二区三区| 男人日女人逼逼| 91在线国产福利| 日韩欧美在线观看免费| 亚洲天堂2020| 成人自拍视频网| 在线观看日本一区| 国产精品中文字幕欧美| 欧美人与禽zozzo禽性配| 精品国产乱码久久久久久久久| 黑人另类精品××××性爽| 国产伦视频一区二区三区| 国产精品毛片| 午夜精产品一区二区在线观看的| 欧美主播一区二区三区美女| 北条麻妃在线| 91精品视频观看| 好看的亚洲午夜视频在线| 日韩av手机在线播放| 欧美午夜片欧美片在线观看| 国产福利免费在线观看| 国产在线不卡精品| 在线国产日韩| 国产中年熟女高潮大集合| 欧美日韩电影在线播放| 午夜激情在线| 久久久久久九九九九| 青青青伊人色综合久久| wwwav国产| 日韩激情在线视频| 欧美jizz18| 精品少妇人欧美激情在线观看| 久久蜜臀精品av| 国产精品伦理一区| 久久久伊人日本| 精品久久成人| 丰满人妻一区二区三区大胸| 欧美色视频日本版| 日本精品在线| 久久99精品国产一区二区三区| 全国精品久久少妇| 久草资源在线视频| 一区二区三区 在线观看视| 国产日韩在线观看视频| 欧美三级一级片| **欧美大码日韩| 青青国产在线| 97人人做人人人难人人做| 男女精品网站| 欧产日产国产v| 尤物九九久久国产精品的特点| 中文在线免费一区三区| 天天爽天天爽夜夜爽| 亚洲丰满少妇videoshd|