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

iOS相冊Moment功能的優(yōu)化方案

移動(dòng)開發(fā)
最近在開發(fā)公司產(chǎn)品Perfect365的Gallery模塊, 包括按日期排序的Moment以及Album這兩個(gè)模塊. Moment功能和系統(tǒng)相冊類似, 就是根據(jù)圖片的日期信息進(jìn)行排序,然后按照不同日期分section顯示.

最近在開發(fā)公司產(chǎn)品Perfect365的Gallery模塊, 包括按日期排序的Moment以及Album這兩個(gè)模塊. Moment功能和系統(tǒng)相冊類似, 就是根據(jù)圖片的日期信息進(jìn)行排序, 然后按照不同日期分section顯示.

 

18.jpg

Moment的實(shí)現(xiàn)思路很簡單: 先遍歷系統(tǒng)的所有相冊, 然后獲取每個(gè)相冊內(nèi)圖片的日期信息, 根據(jù)日期進(jìn)行分類和排序, ***把枚舉完的所有數(shù)據(jù)放到界面上來顯示。示例代碼如下:

 


  1. NSSortDescriptor *sort = [NSSortDescriptor sortDescriptorWithKey:@"date" ascending:NO]; 
  2.  
  3. [objects sortUsingDescriptors:@[sort]]; 
  4.  
  5. MomentCollection *lastGroup = nil; NSMutableArray *ds = [[NSMutableArray alloc] init]; 
  6.  
  7. for (ALAsset *asset in objects) 
  8.     @autoreleasepool 
  9.     { 
  10.         NSDateComponents *components = [[NSCalendar currentCalendar] components:NSDayCalendarUnit   | 
  11.                                                                                 NSMonthCalendarUnit | 
  12.                                                                                 NSYearCalendarUnit 
  13.                                                                        fromDate:[asset date]]; 
  14.         NSUInteger month = [components month]; 
  15.         NSUInteger year  = [components year]; 
  16.         NSUInteger day   = [components day]; 
  17.          
  18.         if (!lastGroup || lastGroup.year!=year || lastGroup.month!=month || lastGroup.day!=day) 
  19.         { 
  20.             lastGroup = [MomentCollection new]; [ds addObject:lastGroup]; 
  21.              
  22.             lastGroup.month = month; lastGroup.year = year; lastGroup.day = day; 
  23.         } 
  24.          
  25.         ALAsset *lPhoto    = [lastGroup.assetObjs lastObject]; 
  26.         NSURL   *lPhotoURL = [lPhoto valueForProperty:ALAssetPropertyAssetURL]; 
  27.         NSURL   *photoURL  = [asset  valueForProperty:ALAssetPropertyAssetURL]; 
  28.         if (![lPhotoURL isEqual:photoURL]) 
  29.         { 
  30.             [lastGroup.assetObjs addObject:asset]; 
  31.         } 
  32.     } 

So far so good, 接下來創(chuàng)建UICollectionView, 設(shè)置好dataSource就可以顯示moment圖片了. 起初我也是這么認(rèn)為的, 但是對于開發(fā)一款擁有6500萬用戶的App來說everything is possible. 版本發(fā)布之后, 很多用戶反饋打開相冊后App直接freeze掉, what the hell is this? QA測試時(shí)一切OK的呀. 好吧, 繼續(xù)騷擾用戶詢問到底是神馬情況, 用戶回復(fù): 我手機(jī)里面放了30k+圖片, 占了20G+的存儲(chǔ)空間. OH MY GOD!!!

優(yōu)化方案

對于Moment功能, 肯定需要遍歷完系統(tǒng)內(nèi)的所有相冊圖片, 然后再按日期排序后顯示給用戶, 那優(yōu)化就只能在枚舉和排序這兩部分來壓榨了. 經(jīng)過2天的苦思冥想決定采用分批加載+取尾排序的方案來優(yōu)化. 具體思路為: 如果用戶設(shè)備內(nèi)的圖片比較多, 不是等所有圖片都枚舉排序完了再顯示, 而是枚舉每隔一定數(shù)量的圖片(e.g. 50張)后就拋出去(放到NSOperationQueue里)按日期分類并排序, 再顯示給用戶, 這樣讓用戶看到我們動(dòng)態(tài)加載圖片的過程, 讓他知道我們的程序still alive, 并且在不斷的加載圖片. 但是一般情況下排序的耗時(shí)會(huì)大于圖片的枚舉, 也就是***個(gè)50張排完序后, 前面枚舉放到Queue里面等待排序的已經(jīng)有好幾批了, 那么我們只對***一批的圖片再排序(也就是取尾)并清空當(dāng)前的Queue, 因?yàn)橹虚g的幾批數(shù)據(jù)已經(jīng)makes no sense了. 方案詳細(xì)流程圖如下:

19.jpg

曲線流程圖

為了***程度的減輕動(dòng)態(tài)加載后刷新顯示對用戶造成的突兀感, 在顯示之前需要判斷用戶是否在滑動(dòng)頁面, 只有頁面靜止的時(shí)候刷新顯示. 但對于全部圖片枚舉完成后的***一批數(shù)據(jù)則要暫時(shí)保存住(否則就木有東東顯示了), 待用戶停止滑動(dòng)后reloadData.

分批加載

Moment需要按日期分類顯示(***的顯示在最前面), 所以在枚舉相冊的時(shí)候可以先從camera roll開始(一般用戶拍攝的照片相對導(dǎo)入的圖片會(huì)早一點(diǎn)). 加載到50的倍數(shù)張后就拋到queue里面等待排序, 一個(gè)相冊枚舉完后再繼續(xù)遍歷其余的相冊...

 


  1. - (void)getPhotosWithGroupTypes:(ALAssetsGroupType)types 
  2.                     batchReturn:(BOOL)batch 
  3.                      completion:(void (^)(BOOL ret, id obj))completion 
  4.     self.batchBlock        = completion; 
  5.     NSMutableArray *tmpArr = [[NSMutableArray alloc] init]; 
  6.      
  7.     [self.assetLibary enumerateGroupsWithTypes:types 
  8.      
  9.                                     usingBlock:^(ALAssetsGroup *group, BOOL *stop) 
  10.     { 
  11.         if (self.stopEnumeratePhoto) {*stop = YES; return;} 
  12.         NSInteger gType = [[group valueForProperty:ALAssetsGroupPropertyType] integerValue]; 
  13.         if (group && (gType != ALAssetsGroupPhotoStream)) 
  14.         { 
  15.             [group setAssetsFilter:[ALAssetsFilter allPhotos]]; 
  16.              
  17.             [group enumerateAssetsWithOptions:NSEnumerationReverse 
  18.                                    usingBlock:^(ALAsset *result, NSUInteger index, BOOL *stop) 
  19.             { 
  20.                 if (self.stopEnumeratePhoto) {*stop = YES; return;} 
  21.                  
  22.                 if (result) [tmpArr addObject:result]; 
  23.                  
  24.                 if (batch && !([tmpArr count]%50)) [self addQueueWithData:tmpArr final:NO]; 
  25.             }]; 
  26.         } 
  27.         else if (nil == group) 
  28.         { 
  29.             [self addQueueWithData:tmpArr final:YES]; 
  30.         } 
  31.     }failureBlock:nil]; 

取尾排序

每組批次的圖片都加到一個(gè)串行queue隊(duì)列里面等待排序, 某個(gè)批次的排序完成之后取當(dāng)前queue***一個(gè)(也就是***過來的枚舉圖片)繼續(xù)執(zhí)行排序, 并清空當(dāng)前的queue. 也就是在下面的sortMomentWithDate:final:函數(shù)里面調(diào)用cleanQueueAfterRoundOperation.

 


  1. - (void)addQueueWithData:(NSMutableArray *)data final:(BOOL)final 
  2.     NSMutableArray *rawData = [NSMutableArray arrayWithArray:data]; 
  3.      
  4.     NSBlockOperation *op = [NSBlockOperation blockOperationWithBlock:^ 
  5.     { 
  6.         [self sortMomentWithDate:rawData final:final]; 
  7.     }]; 
  8.      
  9.     [self.operQueue addOperation:op]; 
  10.  
  11. - (void)cleanQueueAfterRoundOperation 
  12.     if (self.operQueue == nil) return
  13.      
  14.     if (self.operQueue.operationCount > 1
  15.     { 
  16.         NSArray *queueArr = self.operQueue.operations; 
  17.         NSMutableArray *opArr = [NSMutableArray arrayWithArray:queueArr]; 
  18.          
  19.         [opArr removeLastObject]; [opArr removeLastObject]; 
  20.         [opArr makeObjectsPerformSelector:@selector(cancel)]; 
  21.     } 

刷新CollectionView顯示圖片

中間批次按日期分類過的數(shù)據(jù)ready后, 在reloadData之前先判斷一下當(dāng)前用戶是否在滑動(dòng)collectionView, 如果是非scroll狀態(tài)則刷新顯示, 否則直接drop掉, 但是對于***一批數(shù)據(jù)需要先存儲(chǔ)著, 并在scrollViewDidEndDragging和scrollViewDidEndDecelerating里面判斷, 一旦用戶停止滑動(dòng)了就立即刷新到collectionView上.

 


  1. [[ImageDataAPI sharedInstance] getMomentsWithBatchReturn:YES 
  2.                                                ascending:NO 
  3.                                               completion:^(BOOL done, id obj) 
  4.     NSMutableArray *dArr = (NSMutableArray *)obj; 
  5.      
  6.     if (dArr != nil && [dArr count]) 
  7.     { 
  8.         if (!self.momentView.dragging && !self.momentView.decelerating) 
  9.         { 
  10.             dispatch_async(dispatch_get_main_queue(), ^ 
  11.             { 
  12.                 [self reloadWithData:dArr]; 
  13.             }); 
  14.         } 
  15.         else 
  16.         { 
  17.             if (done) {self.backupArr = dArr} 
  18.         } 
  19.     } 
  20. }]; 
  21.  
  22. - (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate 
  23.     if (!decelerate && self.backupArr) 
  24.     { 
  25.         dispatch_async(dispatch_get_main_queue(), ^{ 
  26.             [self reloadWithData:self.backupArr]; 
  27.             self.backupArr = nil; // done refresh 
  28.         }); 
  29.     } 
  30.  
  31. - (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView 
  32.     if (self.backupArr) 
  33.     { 
  34.         dispatch_async(dispatch_get_main_queue(), ^{ 
  35.             [self reloadWithData:self.backupArr]; 
  36.             self.backupArr = nil; // done refresh 
  37.         }); 
  38.     } 

后續(xù)改進(jìn)思路

按上述方案不管設(shè)備圖片有多少, 基本可以正常打開相冊并加載圖片. 但還是有很多需要繼續(xù)改進(jìn)的地方: e.g.

  • 中間批次的數(shù)據(jù)ready后也可以先存儲(chǔ)著, 待用戶停止滑動(dòng)后在reload上去, 而不是簡單的drop掉.

  • 排序還需要再優(yōu)化. 現(xiàn)在***批50張圖片排序后, 第二批進(jìn)入排序的200張圖片又需要重新分類排序, 中間批次數(shù)據(jù)只是為了先顯示給用戶看. 是不是第200張圖片可以只對后面的150張進(jìn)行排序, 也就是后面150張有新的日期, 則新建section, 相同日期直接insert到前面去. 這個(gè)還需要后面再研究...

以上只是自己的一些優(yōu)化思路, 如果有更好的方案, 歡迎留言交流~~

Photos.framework

iOS 8新引入了全新的PhotoKit API, 用來替代AssetsLibrary框架, PhotoKit提供了直接訪問Moment數(shù)據(jù)的接口+ (PHFetchResult *)fetchMomentsWithOptions:(nullable PHFetchOptions *)options該函數(shù)直接返回按日期分類的圖片集合數(shù)據(jù), 且速度非常快(猜想是不是Apple在用戶拍攝圖片或者導(dǎo)入圖片時(shí)已mark日期信息并分類排序). 因此在iOS 8以上的系統(tǒng)可以直接采用PhotoKit框架來實(shí)現(xiàn)moment功能.

 


  1. PHFetchOptions *options  = [[PHFetchOptions alloc] init]; 
  2. options.sortDescriptors  = @[[NSSortDescriptor sortDescriptorWithKey:@"endDate" 
  3.                                                            ascending:ascending]]; 
  4. PHFetchResult  *momentRes = [PHAssetCollection fetchMomentsWithOptions:options]; 
  5. NSMutableArray *momArray  = [[NSMutableArray alloc] init]; 
  6. for (PHAssetCollection *collection in momentRes) 
  7.     NSDateComponents *components = [[NSCalendar currentCalendar] components:NSDayCalendarUnit   | 
  8.                                                                             NSMonthCalendarUnit | 
  9.                                                                             NSYearCalendarUnit 
  10.                                                                    fromDate:collection.endDate]; 
  11.     NSUInteger month = [components month]; 
  12.     NSUInteger year  = [components year]; 
  13.     NSUInteger day   = [components day]; 
  14.     MomentCollection *moment = [MomentCollection new]; 
  15.     moment.month = month; moment.year = year; moment.day = day; 
  16.     PHFetchOptions *option  = [[PHFetchOptions alloc] init]; 
  17.     option.predicate = [NSPredicate predicateWithFormat:@"mediaType = %d", PHAssetMediaTypeImage]; 
  18.     moment.assetObjs = [PHAsset fetchAssetsInAssetCollection:collection 
  19.                                                      options:option]; 
  20.     if ([moment.assetObjs count]) [momArray addObject:moment]; 

So, 我們可以對外統(tǒng)一moment接口, 在內(nèi)部(Gallery Model類)區(qū)分系統(tǒng)實(shí)現(xiàn): iOS 7系統(tǒng)采用AssetsLibrary并使用上文的優(yōu)化方案, iOS 8系統(tǒng)則直接調(diào)用Photos.framework的Moment接口.

但是這里面有個(gè)問題, AssetsLibrary的類型是ALAssetsGroup, 而PhotoKit的類型是PHFetchResult, 怎么在使用的時(shí)候統(tǒng)一呢? 難道還需要在外部調(diào)用的時(shí)候再區(qū)分一下系統(tǒng)么?

解決方法很簡單, 定義自己的數(shù)據(jù)類, 在數(shù)據(jù)結(jié)構(gòu)內(nèi)部再區(qū)分, 外部調(diào)用時(shí)使用的都是自己定義的數(shù)據(jù)類型:

e.g. 定義MomentCollection, 包括年月日信息, 對外的屬性assetObjs則在內(nèi)部區(qū)分系統(tǒng)并返回或設(shè)定相應(yīng)的類型:

 


  1. @interface MomentCollection : NSObject 
  2.  
  3. @property (nonatomic, readwrite) NSUInteger     month; 
  4. @property (nonatomic, readwrite) NSUInteger     year; 
  5. @property (nonatomic, readwrite) NSUInteger     day; 
  6. @property (nonatomic, strong) id assetObjs; 
  7.  
  8. @end 
  9.  
  10. @property (nonatomic, strong) NSMutableArray *items; 
  11. @property (nonatomic, strong) PHFetchResult  *assets; 
  12.  
  13. - (id)assetObjs 
  14.     return IS_IOS_8 ? self.assets : self.items; 
  15.  
  16. - (void)setAssetObjs:(id)assetObjs 
  17.     if (IS_IOS_8) 
  18.     { 
  19.         self.assets = (PHFetchResult *)assetObjs; 
  20.     } 
  21.     else 
  22.     { 
  23.         self.items  = (NSMutableArray *)assetObjs; 
  24.     } 

對于相冊或者某個(gè)具體的圖片也是類似的處理方法, 定義AlbumObj和PhotoObj數(shù)據(jù)類型. 這樣外界(調(diào)用者)就不用管數(shù)據(jù)類型了, 所有的邏輯都在內(nèi)部handle了...

另外, 對于對于其他功能, 比如相冊的枚舉, 相冊Poster圖片的獲取, 圖片URL的獲取, 某個(gè)相冊內(nèi)所有thumbnail的獲取等等都可以對外統(tǒng)一接口, 內(nèi)部再區(qū)分是使用PhotoKit還是AssetsLibrary.

 


  1. - (void)getMomentsWithBatchReturn:(BOOL)batch // batch for iOS 7 only 
  2.                         ascending:(BOOL)ascending 
  3.                        completion:(void (^)(BOOL done, id obj))completion; 
  4.                         
  5. - (void)getThumbnailForAssetObj:(id)asset 
  6.                        withSize:(CGSize)size  // size for iOS 8 only 
  7.                      completion:(void (^)(BOOL ret, UIImage *image))completion; 
  8.                       
  9. - (void)getURLForAssetObj:(id)asset 
  10.                 /*usingPH:(BOOL)usingPH*/ 
  11.                completion:(void (^)(BOOL ret, NSURL *URL))completion; 
  12.                 
  13. - (void)getAlbumsWithCompletion:(void (^)(BOOL ret, id obj))completion; 
  14.  
  15. - (void)getPosterImageForAlbumObj:(id)album 
  16.                        completion:(void (^)(BOOL ret, id obj))completion; 
  17.                         
  18. - (void)getPhotosWithGroup:(id)group 
  19.                 completion:(void (^)(BOOL ret, id obj))completion; 
  20.                  
  21. - (void)getImageForPhotoObj:(id)asset 
  22.                    withSize:(CGSize)size 
  23.                  completion:(void (^)(BOOL ret, UIImage *image))completion; 

完整的moment優(yōu)化方案和PhotoKit/AssetsLibrary集成接口實(shí)現(xiàn)代碼(RJPhotoGallery)已經(jīng)上傳到GitHub, 有興趣的童鞋可以參考一下. 程序內(nèi)封裝的ImageDataAPI是圖片加載的model類, 實(shí)現(xiàn)了Moment/Album功能, 有需要的可以直接copy過去使用.

P.S. 歡迎各路童鞋大神吐槽和交流~~

責(zé)任編輯:倪明 來源: RylanJIN投稿
相關(guān)推薦

2013-10-16 15:36:53

iOS優(yōu)化

2022-09-05 15:29:52

Windows 11微軟功能

2021-10-11 17:22:18

微信iOS騰訊

2022-11-11 17:23:49

Windows 11微軟資源管理器

2013-09-17 10:17:39

Android布局

2022-12-01 07:11:23

蘋果iOS

2015-05-28 10:20:34

js相冊翻頁

2009-06-17 08:47:00

Hibernate優(yōu)化

2015-07-28 10:03:19

Java性能優(yōu)化

2010-05-07 11:00:25

Oracle多表查詢

2010-07-01 14:23:25

SQL Server查

2015-09-22 09:46:46

iOS9漏洞

2013-07-30 18:52:11

RiverbedWAN廣域網(wǎng)優(yōu)化

2009-07-14 10:13:38

MyEclipse優(yōu)化

2013-10-16 16:17:15

iOS開發(fā)優(yōu)化方案

2013-12-17 16:21:17

iOSiOS性能優(yōu)化

2010-03-22 15:58:08

Python模塊功能

2021-11-23 10:25:35

性能優(yōu)化iOS App 啟動(dòng)優(yōu)化

2010-05-14 17:56:16

SQL優(yōu)化索引

2023-04-25 08:01:23

JavaQuarkusKubernetes
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號

国产一区二区日韩| 色婷婷综合久久久中文字幕| 成人激情直播| 中文字幕亚洲精品一区| 你懂的视频欧美| 欧美日韩亚洲综合在线 欧美亚洲特黄一级 | 中韩乱幕日产无线码一区| 国产精品久久久久影院| 国产精品久久久一区二区三区| 国产精品久久久久久久久久久久久久久久久 | 欧美色图亚洲天堂| 亚洲人和日本人hd| 欧美一级免费观看| www.国产区| 婷婷av在线| 国产日本欧美一区二区| 亚洲a区在线视频| 国产精品久免费的黄网站| 天天综合网网欲色| 亚洲男女自偷自拍图片另类| 国产农村妇女精品久久| 天天综合网站| 亚洲成人自拍偷拍| 亚洲成年人专区| 免费a在线观看| 成人免费av网站| 成人激情黄色网| 亚洲成人第一网站| 亚洲青涩在线| 美女性感视频久久久| 亚洲自拍偷拍图| 美女扒开腿让男人桶爽久久动漫| 91麻豆精品久久久久蜜臀| 激情网站五月天| 不卡一本毛片| 一区二区三区四区不卡在线| 亚洲自拍的二区三区| 男男电影完整版在线观看| 成人午夜av影视| 成人在线国产精品| 中文字幕永久在线观看| 久久蜜桃精品| 热久久99这里有精品| 日韩乱码一区二区| 国内自拍视频一区二区三区| 久久视频在线看| 亚洲欧美卡通动漫| 欧美偷拍自拍| 主播福利视频一区| 一二三四国产精品| 精品久久影视| 在线观看免费高清视频97| 国产男男chinese网站| 极品束缚调教一区二区网站 | 国产精品高精视频免费| 欧美精品一二三四区| 一本久道久久久| 国产91精品高潮白浆喷水| 日韩精品一区二区三| 亚洲激情专区| 91精品国产777在线观看| 日韩精品一区二区av| 亚洲一区二区三区四区五区午夜| 91大神福利视频在线| 免费av网站在线| 日韩va欧美va亚洲va久久| 国产精品三级久久久久久电影| 日韩欧美一级大片| 久久成人久久爱| 亚洲在线免费观看| 老熟妇高潮一区二区高清视频 | 男生草女生视频| 波多野结衣一区| 日韩视频在线一区| 青娱乐国产在线| 亚洲精品人人| 日韩av电影在线网| 一区二区国产欧美| 国产成人亚洲精品狼色在线| 国产一区在线免费| 人成免费电影一二三区在线观看| 久久精品亚洲国产奇米99| 亚洲自拍三区| 91九色porn在线资源| 色哟哟亚洲精品| 日本肉体xxxx裸体xxx免费| 91麻豆精品| 日韩大陆毛片av| 国产7777777| 亚洲天堂成人| 日本电影亚洲天堂| 国产又粗又猛又爽又黄的| 成人一级视频在线观看| 欧美资源一区| 最新av在线播放| 色综合网站在线| 亚洲一区二区中文字幕在线观看| 国产精东传媒成人av电影| 亚洲午夜久久久影院| www.超碰在线观看| 老司机一区二区三区| 国产中文字幕日韩| 天堂中文在线8| 亚洲欧美一区二区三区孕妇| 亚洲中文字幕无码专区| 99国内精品久久久久| 亚洲精品福利在线| 爱爱视频免费在线观看| 久久激情一区| 国产二区一区| 黄色网址在线免费观看| 五月婷婷久久综合| 极品粉嫩美女露脸啪啪| 亚洲区小说区| 欧美极品美女视频网站在线观看免费| 91porny九色| 成人99免费视频| 日本不卡一区二区三区四区| 欧美黑人一区| 亚洲第一区中文字幕| 久久精品一区二区三区四区五区| 香蕉av777xxx色综合一区| 99免费在线观看视频| av在线播放av| 一本高清dvd不卡在线观看| 亚洲国产精品第一页| 天天av综合| 国产精品男女猛烈高潮激情| 高清一区二区三区四区| 亚洲免费伊人电影| 色综合天天色综合| 啪啪亚洲精品| 欧美在线视频免费观看| 秋霞av鲁丝片一区二区| 亚洲狠狠丁香婷婷综合久久久| 国产aⅴ爽av久久久久| 欧美日韩黑人| 国产精品成人播放| 激情小视频在线| 欧美性猛交xxxx乱大交3| 婷婷五月精品中文字幕| 国内视频精品| 亚洲一区国产精品| 国产在线69| 91精品国产综合久久精品图片| av片在线免费看| 老司机精品视频在线| 亚洲国产欧美日韩| 国产亚洲精品精品国产亚洲综合| 一区二区成人精品| 欧美日韩 一区二区三区| 久久久久久久久久久电影| 日韩av资源在线| 自拍偷拍欧美一区| 日本精品视频在线观看| 户外极限露出调教在线视频| 91成人在线精品| 山东少妇露脸刺激对白在线| 蜜臀久久99精品久久久画质超高清 | 国产精品国产三级国产三级人妇| 在线看的黄色网址| 婷婷亚洲五月| 操人视频欧美| 欧美在线极品| 国产一区二区三区在线观看视频| 中文字幕免费视频观看| 国产精品激情偷乱一区二区∴| www.cao超碰| 欧美精品啪啪| 久久99精品久久久久久秒播放器| 在线最新版中文在线| 在线成人激情视频| 国产口爆吞精一区二区| 一个色综合网站| aa片在线观看视频在线播放| 久久综合九色综合欧美狠狠| 亚洲成人在线视频网站| 麻豆一二三区精品蜜桃| 97香蕉久久超级碰碰高清版| 久草在线青青草| 777色狠狠一区二区三区| 免费麻豆国产一区二区三区四区| 94色蜜桃网一区二区三区| 91色国产在线| 欧美成人tv| 日本福利一区二区三区| 国产午夜久久av| 欧美性视频网站| 日本在线观看视频| 亚洲成年人在线| 国产九色91回来了| 一区二区三区四区在线免费观看| 巨胸大乳www视频免费观看| 久久99精品国产| 1024av视频| 66视频精品| 美国av一区二区三区| 福利一区三区| 日韩女优在线播放| 欧美bbbxxxxx| 视频一区视频二区国产精品| 天天干天天插天天操| 欧美老人xxxx18| 男人午夜免费视频| 一区二区在线观看视频| 国产jjizz一区二区三区视频| 国产精品99精品久久免费| 色婷婷综合久久久久中文字幕 | 九一精品国产| 成人欧美一区二区三区视频| 电影一区二区| 欧美一性一乱一交一视频| 91高清在线观看视频| 在线精品播放av| 亚洲日本香蕉视频| 欧美一区二区啪啪| 亚洲一区二区影视| 日韩欧美国产高清91| 18精品爽视频在线观看| 日韩一区欧美小说| 日韩中文字幕有码| 久久久无码精品亚洲日韩按摩| 韩国三级丰满少妇高潮| 蜜臀a∨国产成人精品| 成人羞羞国产免费网站| 99热在线精品观看| 国产在线视频综合| 亚洲一区二区三区无吗| 亚洲电影免费| 日韩一区亚洲二区| 日韩欧美三级一区二区| 一本色道久久综合亚洲精品酒店| 国产精品区二区三区日本| 日韩精品中文字幕吗一区二区| 91精品久久久久久综合乱菊 | 精品亚洲第一| 成人高潮a毛片免费观看网站| 91久久国产精品91久久性色| 久久精品97| 国产精品日韩一区| 成人国产精品| 国产伦精品免费视频| 成人性片免费| 成人动漫网站在线观看| **国产精品| 亚洲一区二区三区乱码aⅴ| 青草综合视频| 亚洲综合av影视| 日本一区二区三区电影免费观看| 亚洲综合精品伊人久久| 亚洲第一二区| 国产一区免费观看| 日韩av午夜| 日本成人看片网址| 久久国产亚洲| 4444在线观看| 亚洲午夜一区| 精品一区二区中文字幕| 日日嗨av一区二区三区四区| 爱情岛论坛vip永久入口| 久久精品国产第一区二区三区| 五月激情五月婷婷| 国产剧情一区二区| 又黄又爽又色的视频| 成人一区二区三区中文字幕| 玖玖爱在线观看| 国产精品嫩草99a| 欧美激情国产精品免费| 亚洲成人在线观看视频| 欧美a视频在线观看| 欧美日韩国产另类不卡| 不卡的日韩av| 日韩精品在线视频观看| 成黄免费在线| 九九久久久久久久久激情| 日韩脚交footjobhdboots| 国产精品久久久久久久电影| 精品国产第一国产综合精品| 国模精品一区二区三区| 精品一区二区三区中文字幕老牛| 最新欧美日韩亚洲| 亚洲经典自拍| 最近中文字幕一区二区| 国产成人精品三级麻豆| www.久久av| 亚洲日本中文字幕区| 国产精品999在线观看| 欧美日本视频在线| 欧美特级特黄aaaaaa在线看| 这里只有精品在线播放| 金瓶狂野欧美性猛交xxxx| 国产精品福利无圣光在线一区| 日韩在线观看中文字幕| 欧美日韩一区二区三区在线视频 | 美女少妇一区二区| 顶级嫩模精品视频在线看| 国产熟女一区二区| 亚洲综合在线观看视频| 亚洲国产无线乱码在线观看| 亚洲成人三级在线| 免费观看成人高潮| 全亚洲最色的网站在线观看| 久久国产精品免费一区二区三区| 欧美精品成人一区二区在线观看 | 国内外成人免费激情在线视频网站| 成人视屏在线观看| 国产精品一区二区免费| 小小影院久久| 国产97色在线 | 日韩| 成人精品gif动图一区| 国产日产精品一区二区三区的介绍| 欧美日韩国产麻豆| 性生活视频软件| 日韩一区视频在线| 成人日韩精品| 久久综合狠狠综合久久综青草| 一个色综合网| 潘金莲激情呻吟欲求不满视频| 久久夜色精品国产噜噜av| 久久婷婷综合国产| 欧美一区二区三区四区高清| 成年人视频免费在线观看| 热草久综合在线| 日本成人a网站| 3d动漫一区二区三区| 国产成人超碰人人澡人人澡| 国产天堂av在线| 欧美精品乱码久久久久久| 国产1区2区3区在线| 日本伊人精品一区二区三区介绍| 国产精品流白浆在线观看| 成人免费看片'免费看| 国产精品综合一区二区| 波多野结衣爱爱视频| 555www色欧美视频| 日本三级在线视频| 国产精品影片在线观看| 国产欧美亚洲精品a| 免费激情视频在线观看| 国产网站一区二区三区| 国产又粗又猛又爽又| 亚洲午夜女主播在线直播| 日本在线视频一区二区| 四虎一区二区| 麻豆91精品91久久久的内涵| 又嫩又硬又黄又爽的视频| 欧美日韩一区二区三区视频| 成年人视频网站在线| 国产有码一区二区| 午夜欧美在线| 免费黄视频在线观看| 一区二区三区精密机械公司| 超碰免费在线97| 韩国视频理论视频久久| 欧洲亚洲成人| 乱子伦视频在线看| 日本一区二区三区在线观看| 一级全黄裸体免费视频| 蜜臀久久99精品久久久久久宅男| 一区中文字幕| 国产精品无码人妻一区二区在线| 99re在线视频这里只有精品| 久久久久在线视频| 中文字幕av一区二区三区谷原希美| 久久av影院| 超碰97在线看| 91在线观看下载| 亚洲精品一区二区二区| 欧美成人精品xxx| 欧美黑白配在线| 欧美精品成人网| 亚洲精品午夜久久久| 刘亦菲久久免费一区二区| 日本精品免费一区二区三区| 日本欧美肥老太交大片| wwwxxxx在线观看| 欧美性猛交99久久久久99按摩| a√资源在线| 高清av免费一区中文字幕| 欧美专区在线| 亚洲一二三在线观看| 亚洲国产精品字幕| 丁香婷婷久久| 欧美久久在线观看| 国产亚洲人成网站| 99久久久无码国产精品免费| 98精品国产高清在线xxxx天堂| 精品国产网站| 国产精久久久久| 欧美色男人天堂| sm在线播放| 经典三级在线视频| 久久综合久久综合九色| 国产视频www| 日本高清视频一区| 欧美精品综合| 又嫩又硬又黄又爽的视频| 亚洲精品mp4| 国产亚洲亚洲国产一二区| 亚洲国产精品久久久久婷蜜芽 |