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

初識CoreData

移動開發(fā)
這其實是一篇 WWDC 2015 Session 220 的學習筆記,順便整理了下 Core Data 批量操作和聚合操作的小技巧.

這其實是一篇 WWDC 2015 Session 220 的學習筆記,順便整理了下 Core Data 批量操作和聚合操作的小技巧.

批量操作

Core Data 把數(shù)據(jù)庫封裝成了”object graph(對象圖)”,雖然對于面向?qū)ο缶幊虂碚f有了管理 Model 間繼承與關(guān)系的便利性,但同樣也犧牲了性能.比如批量操作時就需要將每條記錄作為NSManagedObject 對象讀取到內(nèi)存中,修改之后再存入數(shù)據(jù)庫.然而用 SQL 語句執(zhí)行既方便又高效.

于是蘋果在 iOS8 發(fā)布時順便弄了個”Batch Updates”,在 iOS9 發(fā)布時又弄了個”Batch Deletions”.這兩個”新技術(shù)”說白了就是直接操作持久層數(shù)據(jù)庫,然后還需要手動更新/刪除內(nèi)存中的 context 好使得我們的 UI 從 context 讀取的內(nèi)容不會出錯.這樣做的好處就是省去了向內(nèi)存的一次寫操作和查找操作,而越過 context 直接操作持久層,最后我們需要自己手動將持久層的變更結(jié)果(BatchResult)重新寫入 context.只有當需要更新/刪除大批量數(shù)據(jù)的時候才需要用到這兩個技術(shù).

然而蘋果至今未提供二者的文檔,關(guān)于”Batch Updates”我在CoreData處理海量數(shù)據(jù)中給出了用法和例子.看了 WWDC2015 Session 220 后覺得 “Batch Deletions” 應(yīng)該與 “Batch Updates” 用法類似,并且坑爹. PS: 我在 iOS9 上測試 “Batch Updates” 發(fā)現(xiàn)了一個 bug, 每次更新 context 都會漏掉一條記錄,這讓我十分郁悶.

聚合操作

說完了批量操作,再談?wù)劸酆喜僮?在 SQL 語法中有一類聚合函數(shù),比如count(),sum(),max(),min(),avg() 等,它們一般搭配著 group by 甚至 having來使用.然而在號稱”object graph”的 Core Data 中,這種聚合操作在 NSFetchRequest 中也是有替代品的.下面的例子取自CORE DATA AND AGGREGATE FETCHES IN SWIFT:

我們想計算出每條產(chǎn)品線的銷售量和退貨量,可以用下面的 SQL 語句搞定:

  1. SELECT ProductLine, SUM(Sold) as SoldCount, SUM(Returned) as ReturnedCount FROM Products GROUP BY ProductLine 

NSFetchRequest 有個 propertiesToGroupBy 屬性,正好對應(yīng)著 group by 語句:

  1. // Build out our fetch request the usual way 
  2. let request = NSFetchRequest(entityName: self.entityName) 
  3. // This is the column we are grouping by. Notice this is the only non aggregate column. 
  4. request.propertiesToGroupBy = ["productLine"

下面還需要映射 SQL 語句中聚合函數(shù)及其計算后的結(jié)果,此時我們需要用到NSExpressionDescription 和 NSExpression 來替換 SQL 中的ProductLine, SUM(Sold) as SoldCount, SUM(Returned) as ReturnedCount:

  1. // Create an array of AnyObject since it needs to contain multiple types--strings and 
  2. // NSExpressionDescriptions 
  3. var expressionDescriptions = [AnyObject]() 
  4.      
  5. // We want productLine to be one of the columns returned, so just add it as a string 
  6. expressionDescriptions.append("productLine"
  7.      
  8.  
  9.  
  10. // Create an expression description for our SoldCount column 
  11. var expressionDescription = NSExpressionDescription() 
  12. // Name the column 
  13. expressionDescription.name = "SoldCount" 
  14. // Use an expression to specify what aggregate action we want to take and 
  15. // on which column. In this case sum on the sold column 
  16. expressionDescription.expression = NSExpression(format: "@sum.sold"
  17. // Specify the return type we expect 
  18. expressionDescription.expressionResultType = .Integer32AttributeType 
  19. // Append the description to our array 
  20. expressionDescriptions.append(expressionDescription) 
  21.  
  22.  
  23.      
  24. // Create an expression description for our ReturnedCount column 
  25. expressionDescription = NSExpressionDescription() 
  26. // Name the column 
  27. expressionDescription.name = "ReturnedCount" 
  28. // Use an expression to specify what aggregate action we want to take and 
  29. // on which column. In this case sum on the returned column 
  30. expressionDescription.expression = NSExpression(format: "@sum.returned"
  31. // Specify the return type we expect 
  32. expressionDescription.expressionResultType = .Integer32AttributeType 
  33. // Append the description to our array 
  34. expressionDescriptions.append(expressionDescription) 

NSExpressionDescription 是用于表示那些抓取結(jié)果中實體中不存在的列名,比如我們這次用的聚合函數(shù)所計算的結(jié)果并不能在實體中找到對應(yīng)的列,于是我們就得給它起個新名字,這就相當于 SQL 中的 as,這里對應(yīng)著 NSExpressionDescription 的 name 屬性.而聚合函數(shù)表達式就需要用 NSExpression 對象來表示,比如 NSExpression(format: "@sum.returned")就是對”returned”這列求和.

像本例中這樣初始化 NSExpression 需要對格式化語法較為熟悉(比如"@sum.returned"),初學者建議看看官方的例子,使用容易理解的構(gòu)造方法一步步拼湊成想要的結(jié)果:Core Data Programming Guide

將以上這三個”列描述”依次添加到 expressionDescriptions 數(shù)組中,最后要賦值給NSFetchRequest 的 propertiesToFetch 屬性:

  1. // Hand off our expression descriptions to the propertiesToFetch field. Expressed as strings 
  2. // these are ["productLine", "SoldCount", "ReturnedCount"] where productLine is the value 
  3. // we are grouping by. 
  4. request.propertiesToFetch = expressionDescriptions 

propertiesToFetch 屬性其實是個 NSPropertyDescription 類型數(shù)組,能表示屬性,一對一關(guān)系和表達式.既然是個大雜燴,NSPropertyDescription 也就有一些子類:NSAttributeDescription,NSExpressionDescription,NSFetchedPropertyDescription,NSRelationshipDescription.我們這里用到的便是 NSExpressionDescription.

在設(shè)定 propertiesToFetch 屬性之前必需要設(shè)定好 NSFetchRequest 的 entity 屬性,否則會拋出 NSInvalidArgumentException 類型的異常.并且只有當 resultType 類型設(shè)為NSDictionaryResultType 時才生效:

  1. // Specify we want dictionaries to be returned 
  2. request.resultType = .DictionaryResultType 

最終結(jié)果:

  1.     ["SoldCount"48"productLine": Bowler, "ReturnedCount"4],  
  2.     ["SoldCount"142"productLine": Stetson, "ReturnedCount"27],  
  3.     ["SoldCount"50"productLine": Top Hat, "ReturnedCount"6

WWDC2015 Core Data 的一些新特性

蘋果號稱有超過40萬個 APP 使用 Core Data,并能讓開發(fā)者少寫50%~70%的代碼.并在內(nèi)存性能上強調(diào)卓越的內(nèi)存拓展和主動式惰性加載,炫耀了它跟 UI 良好的綁定機制,還提供了幾種多重寫入的合并策略.然而這不能阻止開發(fā)者對 Core Data 的吐槽,畢竟建立于持久層之上的”object graph”還做不到像 SQL 那樣面面俱到,于是今年針對 Core Data 新增的 API 更像是查缺補漏,并沒有帶來重大功能更新.

NSManagedObject 新增 API

hasPersistentChangedValues

  1. var hasPersistentChangedValues: Bool { get } 

用此屬性可確定 NSManagedObject 的值與 “persistent store” 是否相同.

objectIDsForRelationshipNamed

  1. func objectIDsForRelationshipNamed(_ key: String) -> [NSManagedObjectID] 

適用于大量的多對多關(guān)系.由于我們不想將整個關(guān)系網(wǎng)絡(luò)加載到內(nèi)存中,所以這個方法僅返回相關(guān)聯(lián)的 ID.下面是一個例子:

  1. let relations = person.objectIDsForRelationshipNamed("family"
  2.  
  3. let fetchFamily = NSFetchRequest(entityName:"Person"
  4. fetchFamily.fetchBatchSize = 100 
  5. fetchFamily.predicate = NSPredicate(format: "self IN %@", relations) 
  6.  
  7. let batchedRelations = managedObjectContext.executeFetchRequest(fetchFamily) 
  8.  
  9. for relative in batchedRelations { 
  10.     //work with relations 100 rows at a time 

通過給出的關(guān)系名稱 “family” 來獲取對應(yīng)的 ID, 并每次遍歷100行記錄,實現(xiàn)了內(nèi)存占用的可控性.

#p#

NSManagedObjectContext 新增 API

refreshAllObjects

  1. func refreshAllObjects() 

正如其名字所描述的那樣,它的功能就是刷新 context 中所有對象,但會保留未保存的變更.相比reset 方法不同的是它會依然保留 NSManagedObject 對象的有效性,我們無需重新抓取任何對象.正因如此,它很適用于打破一些因遍歷雙向關(guān)系循環(huán)而產(chǎn)生的保留環(huán).

mergeChangesFromRemoteContextSave

  1. class func mergeChangesFromRemoteContextSave(_ changeNotificationData: [NSObject : AnyObject], intoContexts contexts: [NSManagedObjectContext]) 

在 store 中使用多個 coordinator 時,這個方法將會從一個 coordinator 接受一個通知,并將其應(yīng)用到另一個 coordinator 中的 context 上.這使得我們可以在所有 context 中存有最新的數(shù)據(jù),Core Data 會維護好所有的 context.

shouldDeleteInaccessibleFaults

  1. var shouldDeleteInaccessibleFaults: Bool 

Core Data 偶爾會拋異常,但Core Data 不能加載故障, 因為它的主動式惰性加載對象使得內(nèi)存中只保留對象圖中的一部分.所以很有可能當我遍歷關(guān)系時要試圖回到磁盤上查找,但此時對象早已被刪除了.于是 shouldDeleteInaccessibleFaults 屬性應(yīng)運而生,默認值為 YES.

如果我們在某處遇到了故障,我們會將其標記為已刪除.任何丟失的屬性將會被設(shè)為null,nil或0.這就使得我們的 app 繼續(xù)運行,并認為發(fā)生故障的對象已被刪除.這樣程序就不會再崩潰.

NSPersistentStoreCoordinator 新增 API

增加這兩個新的 API 的原因是很多開發(fā)者繞過 Core Data 的 API 來直接操作底層數(shù)據(jù)庫文件.因為NSFileManager 和 POSIX 對數(shù)據(jù)庫都不友好,并且如果此時文件的 open 連接沒關(guān)閉的話會損壞文件.

destroyPersistentStoreAtURL

  1. func destroyPersistentStoreAtURL(_ url: NSURL, withType storeType: String, options options: [NSObject : AnyObject]?) throws 

傳入的選項與 addPersistentStoreWithType 方法要一樣,刪除對應(yīng)類型的 persistent store.

replacePersistentStoreAtURL

  1. func replacePersistentStoreAtURL(_ destinationURL: NSURL, destinationOptions destinationOptions: [NSObject : AnyObject]?, withPersistentStoreFromURL sourceURL: NSURL, sourceOptions sourceOptions: [NSObject : AnyObject]?, storeType storeType: String) throws 

與上面的 destroy 一個套路,就是 replace 而已.如果目標位置不存在數(shù)據(jù)庫,那么這個 replace 就相當于拷貝操作了.

Unique Constraints

很多時候我們在創(chuàng)建一個對象之前會查看它是否已經(jīng)存在,如果存在的話就會更新它,否則就創(chuàng)建對象.這很可能產(chǎn)生一個競態(tài)條件,如果多線程同時執(zhí)行下面這段代碼, 很可能就創(chuàng)建了多個重復(fù)的對象:

  1. managedObjectContext.performBlock { 
  2.     let createRequest = NSFetchRequest(entityName: "Recipe"
  3.     createRequest.resultType = ManagedObjectIDResultType 
  4.     let predicate = NSPredicate(format: "source = %@", source) 
  5.     let results = managedObjectContext.executeFetchRequest(createRequest) 
  6.     if (results.count) { 
  7.         //update it! 
  8.     } else { 
  9.         //create it! 
  10.     } 

現(xiàn)在 Core Data 可以搞定這個事情了.我們設(shè)定屬性的值唯一,類似于 SQL 中的 unique 約束.諸如電子郵件,電話號, ISBN 等場景都適用此.同時別忘了 Core Data 的對象圖中實體的繼承關(guān)系,這里規(guī)定子類會從父類繼承到具有 Unique 約束的屬性,并可以將更多的屬性設(shè)為 Unique.

為實體設(shè)置 Unique 屬性十分簡單,只需要在 Xcode 中選中對應(yīng)的實體,打開 “Data Model inspector” 就可以看到 “Constraints”, 點擊加號添加就好:

Model Caching

這是個輕量級的數(shù)據(jù)版本自動遷移解決方案.它會緩存舊版本數(shù)據(jù)中已創(chuàng)建的NSManagedObject 對象會被緩存到 store 中,并被遷移到合適的 store 中.

Generated Subclasses

在 Xcode7 中,自動創(chuàng)建 NSManagedObject 子類時將不再在對應(yīng)實體子類文件中自動填充模板代碼,而是同時創(chuàng)建Category(Objective-C文件) 或 extension(Swift文件),并將模板代碼自動填寫進去.這樣帶來的好處是將我們自己寫的代碼跟 Xcode 生成的模板代碼分開,更易于更新維護.

責任編輯:倪明 來源: 玉令天下的博客
相關(guān)推薦

2011-07-08 17:57:37

iPhone CoreData 數(shù)據(jù)庫

2015-03-12 09:51:09

CoreDataiCloud

2015-06-11 15:25:43

ASP.NET

2014-07-24 09:22:37

iOS 8OS XCoreData

2010-07-25 14:37:40

telnet命令

2012-03-05 13:41:58

OpenFlow

2010-09-10 14:25:00

Daytime協(xié)議

2010-07-12 17:02:33

Netstat TCP

2010-09-09 17:05:37

PPPoE協(xié)議

2010-07-08 12:34:46

HART協(xié)議

2011-07-01 16:04:45

Qt Python

2011-06-14 14:41:14

Python Qt

2011-06-14 15:45:02

Qt Object

2010-09-17 15:28:45

Internet網(wǎng)絡(luò)協(xié)

2010-08-31 16:03:15

2024-10-28 08:15:32

2011-06-14 17:03:03

QML Qt

2021-03-26 14:00:27

物聯(lián)網(wǎng)藍牙低功耗

2022-08-05 11:33:40

云計算

2011-06-30 11:14:23

QML Desktop
點贊
收藏

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

亚洲三级精品| 都市激情久久综合| 国产美女在线观看一区| 久久久久久久国产| 国产综合精品在线| 成人av在线播放| 午夜欧美在线一二页| 日韩精品一线二线三线| 国产黄色一区二区| 久久综合狠狠| 欧美高清不卡在线| 亚洲天堂岛国片| 国产精品毛片视频| 欧美精品在线观看播放| 精品中文字幕av| 中文字幕在线观看播放| 国产日韩一级二级三级| 国产一区二区三区四区五区加勒比| 精品乱码一区内射人妻无码 | 久久精品99久久久| 欧美亚洲免费电影| 久久精品国产亚洲av香蕉| 成人免费av| 亚洲欧美成人精品| 在线天堂www在线国语对白| 国产人与zoxxxx另类91| 欧美综合欧美视频| 欧美激情成人网| 日本黄色免费在线| 五月婷婷综合网| 成人在线免费高清视频| 在线国产91| 国产日韩成人精品| 欧美日韩在线观看一区| 亚洲区小说区图片区| 高清国产一区二区三区| 91视频网页| 国产乱淫av免费| 久久国产精品99精品国产| 国产精品激情av电影在线观看| av黄色在线看| 亚洲一区二区三区四区五区午夜| 久久免费少妇高潮久久精品99| 一区视频免费观看| 91精品二区| 美日韩丰满少妇在线观看| 老司机成人免费视频| 欧美电影一区| 久久精品国产欧美激情| 卡通动漫亚洲综合| 亚洲国产一成人久久精品| 俺去亚洲欧洲欧美日韩| 成人做爰视频网站| 911久久香蕉国产线看观看| 久久伊人色综合| 全程偷拍露脸中年夫妇| 午夜精品婷婷| 97精品视频在线| 亚洲第一精品在线观看| 久久九九电影| 国产精品成人播放| 亚洲视频在线免费播放| 精品中文av资源站在线观看| 国产这里只有精品| 99久久亚洲精品日本无码| 国产精品一品二品| 国产成人成网站在线播放青青| 人妻少妇精品无码专区| 91老师片黄在线观看| 日韩精品第一页| 欧美边添边摸边做边爱免费| 亚洲女人的天堂| 精品一区二区三区无码视频| 亚洲人成在线网站| 欧美日韩日日夜夜| 亚洲成人av免费观看| 超碰97久久| 亚洲男女性事视频| 天天摸日日摸狠狠添| 久久精品亚洲人成影院 | 久久国产精品波多野结衣av| 亚洲精品视频啊美女在线直播| 欧美专区中文字幕| 91精品国产乱码久久久| 国产.欧美.日韩| 日本一区二区高清视频| 在线免费观看污| 色哟哟一区二区三区| 99re精彩视频| 久久a爱视频| 中文字幕av一区二区| 在线观看成人毛片| 蘑菇福利视频一区播放| 91美女高潮出水| 亚洲欧洲成人在线| 亚洲免费色视频| 日本一本二本在线观看| 国产精品1区| 日韩精品中文字幕久久臀| 在线免费看av网站| 久久久久免费| 国产美女在线精品免费观看| av在线天堂播放| 亚洲va欧美va天堂v国产综合| 乌克兰美女av| 人体久久天天| 欧美激情影音先锋| 一本大道伊人av久久综合| 99精品1区2区| 在线观看成人免费| 欧美三区四区| 亚洲精品动漫久久久久| 午夜剧场免费在线观看| 日韩高清不卡一区二区三区| 国产精品区一区二区三在线播放| 日本免费视频在线观看| 日本国产一区二区| 午夜剧场免费看| 欧美暴力喷水在线| 国产精品揄拍500视频| 飘雪影院手机免费高清版在线观看| 一区二区三区成人| 色婷婷一区二区三区在线观看| 欧美日韩123| 欧美专区国产专区| 四虎在线观看| 亚洲 欧美综合在线网络| 韩国一区二区在线播放| 91欧美大片| 国产精品高潮在线| 国产视频网站在线| 91极品美女在线| 欧美狂猛xxxxx乱大交3| 一区二区三区高清视频在线观看| 97欧洲一区二区精品免费| 日韩三级影院| 欧美另类一区二区三区| 国产黄色片在线| 久久97超碰色| 正在播放一区| 国内精品视频| 欧美成人激情视频免费观看| 国产成人精品无码高潮| 亚洲精品综合在线| 亚洲精品一区二区18漫画| 在线中文一区| 999在线观看免费大全电视剧| 激情视频在线观看| 日韩午夜小视频| 免费中文字幕视频| 成人精品视频一区| 僵尸世界大战2 在线播放| 国产精品中文字幕制服诱惑| 久久99热精品| 少妇人妻精品一区二区三区| 欧美视频在线看| caopeng视频| 蜜桃视频一区二区三区在线观看 | avtt香蕉久久| 男人的天堂成人在线| 日韩三级电影| **精品中文字幕一区二区三区| 久久中文字幕在线| 国产成人三级在线观看视频| 懂色av一区二区三区| 男生草女生视频| 蜜桃传媒麻豆第一区在线观看| 精品久久免费观看| 第四色在线一区二区| 日韩免费中文字幕| 日本www在线观看| 日韩欧美另类在线| 亚洲欧美综合另类| 国产精品毛片高清在线完整版| 日本精品一区在线| 亚洲人成毛片在线播放女女| 亚洲毛片aa| 日韩精品一区国产| 欧美影院久久久| 麻豆传媒视频在线观看免费| 亚洲第一精品夜夜躁人人爽 | 欧美一区二区网站| 91看片在线播放| 中文字幕+乱码+中文字幕一区| 91香蕉视频在线观看视频| 国产精品尤物| 中文字幕在线亚洲三区| 欧美美女在线直播| 国产精品中文字幕久久久| 不卡一本毛片| 中文字幕欧美精品日韩中文字幕| 亚洲欧美国产高清va在线播放| 色爱区综合激月婷婷| www青青草原| 国产日韩v精品一区二区| 在线xxxxx| 麻豆成人免费电影| 成人免费观看毛片| 狠狠入ady亚洲精品| 亚洲精品成人自拍| 日韩精品福利一区二区三区| 亚洲xxxx做受欧美| 成人精品一区二区三区电影| 91国内在线视频| 超碰人人在线| 中文字幕日韩专区| 亚洲三级中文字幕| 日韩一区二区三区电影 | 另类成人小视频在线| 国产资源在线视频| 亚洲欧美一级二级三级| 亚洲成人午夜在线| 亚洲国产精品嫩草影院久久av| 91久久精品国产| 99久久精品一区二区成人| 91精品国产99| 成人高潮aa毛片免费| 久久精品美女视频网站| 高清国产福利在线观看| 精品在线小视频| 手机在线精品视频| 欧美成人女星排名| 国产成a人亚洲精v品无码| 欧美二区三区91| 亚洲天堂avav| 欧美视频一二三区| 久久久久久久亚洲| 在线免费一区三区| 天干夜夜爽爽日日日日| 岛国av午夜精品| 天堂网av手机版| 偷拍日韩校园综合在线| 国产在线一区视频| 亚洲一区中文日韩| 国产在线观看你懂的| 亚洲一区二区av在线| 欧美黑人一级片| 亚洲愉拍自拍另类高清精品| 国产乱国产乱老熟300| 亚洲精品成a人| 欧美精品一区二区蜜桃| 亚洲国产欧美在线| 日韩免费av片| 欧美日韩国产综合新一区 | 黄色一级视频免费观看| 亚洲精品成人a在线观看| 久草免费在线观看视频| 亚洲一二三四在线观看| 日本一区二区三区四区五区| 精品福利在线观看| 精品人妻一区二区三区免费看| 欧美日韩综合视频网址| 成人h动漫精品一区二区下载| 色老头久久综合| 在线播放一级片| 欧美放荡的少妇| 亚洲欧美激情国产综合久久久| 亚洲精品www久久久久久广东| 亚洲日本国产精品| 中文国产亚洲喷潮| 1769免费视频在线观看| 97视频在线免费观看| 午夜av成人| 96精品久久久久中文字幕| av成人资源网| 久久综合一区二区三区| 久久一区二区三区电影| 久久www视频| 先锋影音久久久| 午夜免费看视频| 国产成人精品免费在线| 性欧美丰满熟妇xxxx性仙踪林| 欧美激情一区不卡| 91视频综合网| 黑人巨大精品欧美一区二区| 无码久久精品国产亚洲av影片| 在线播放/欧美激情| 蜜臀av午夜精品| 中文字幕亚洲情99在线| 丝袜美腿av在线| 日本亚洲欧美成人| 精品一区视频| 欧美精品一区在线发布| 亚洲欧美一区在线| 亚洲精品一二三四五区| 国产一区二区按摩在线观看| 一区二区不卡免费视频| 亚洲色图欧美在线| 久久精品免费av| 欧美日韩黄色一区二区| 天堂在线视频免费观看| 日韩网站免费观看高清| 小视频免费在线观看| 91久久精品美女| 国产精品一区二区av日韩在线 | 91香蕉视频污在线观看| 午夜日韩在线观看| 国产精品亚洲欧美在线播放| 日韩精品在线观看一区| av免费在线网站| 国产精品入口尤物| 欧美电影在线观看免费| 午夜探花在线观看| 日韩国产欧美在线视频| 毛茸茸free性熟hd| 亚洲毛片av在线| 国产情侣免费视频| 日韩经典中文字幕| av超碰免费在线| 国产日韩欧美在线| 国产成人一区| 日韩日韩日韩日韩日韩| 国产精品系列在线播放| 超碰人人人人人人人| 一本色道亚洲精品aⅴ| 天天摸天天碰天天爽天天弄| 欧美猛交免费看| 99精品国产九九国产精品| 日产中文字幕在线精品一区| 免播放器亚洲| 黄色网址在线视频| 亚洲成人综合视频| a天堂视频在线| 久久天天躁狠狠躁老女人| 国产精品原创视频| 亚洲精品在线免费| 日韩1区2区日韩1区2区| 90岁老太婆乱淫| 狠狠色狠狠色综合日日五| 欧美熟妇另类久久久久久不卡| 久久99热精品这里久久精品| 玖玖玖电影综合影院| 中文字幕色呦呦| 国产在线播放一区三区四| 国产传媒免费在线观看| 91精品在线观看入口| 秋霞午夜在线观看| 91精品在线观| 久久久久av| 欧美一级免费在线| 亚洲激情在线激情| 成人福利小视频| 欧美精品成人在线| 精品亚洲自拍| 欧美成人一区二区在线观看| 93久久精品日日躁夜夜躁欧美 | av福利导福航大全在线| 国产精品一级久久久| 亚洲大胆av| 久久精品综合视频| 一本色道久久综合狠狠躁的推荐| 牛牛热在线视频| 国产精品视频久久| 亚洲成人精品| 日批免费观看视频| 激情成人中文字幕| 成人好色电影| 成人激情综合网| 好看的av在线不卡观看| 亚洲黄色在线网站| 欧美视频在线不卡| 国产黄色在线免费观看| 国产精品一区二区三区免费观看| 国产一级久久| 特级西西人体高清大胆| 日韩一区二区三区免费观看| 岛国av在线播放| 色播五月综合| 国产精品888| 午夜婷婷在线观看| 日韩有码片在线观看| 狠狠一区二区三区| 中文字幕第80页| 亚洲欧美另类图片小说| 色资源在线观看| 成人午夜高潮视频| 亚洲神马久久| 五月天免费网站| 亚洲福利视频免费观看| 韩国精品主播一区二区在线观看 | 日韩黄色免费网站| 少妇影院在线观看| 亚洲美女免费精品视频在线观看| 亚洲精品aa| 18岁网站在线观看| 日韩毛片一二三区| 性感美女福利视频| 91夜夜未满十八勿入爽爽影院| 夜夜嗨一区二区三区| 国产精品国产三级国产传播| 亚洲精品久久久久久久久久久久久| 久久天堂影院| 国产老熟妇精品观看| 亚洲欧美国产77777| 欧美男男同志| 国产精品二区在线| 久久精品免费看| 日韩久久中文字幕| 欧美极品第一页| 日韩伦理一区|