精品欧美一区二区三区在线观看 _久久久久国色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ù)棧公眾號

国产精品视频入口| 中文字幕精品久久| 国产原创popny丨九色| 天堂中文在线资| 日本网站在线观看一区二区三区| 日韩在线视频免费观看高清中文 | 欧美成人久久久免费播放| 亚洲日日夜夜| 狠狠综合久久av一区二区小说 | 欧洲人成人精品| 亚洲天堂第一区| 男人天堂亚洲二区| 国产精品乡下勾搭老头1| 国语自产精品视频在线看一大j8| 欧美人与性囗牲恔配| 日韩一区二区三区色| 91国内精品野花午夜精品| av在线免费观看国产| 韩国福利在线| 成人午夜电影久久影院| 国产精品手机播放| youjizz在线视频| 欧美高清不卡| 日韩中文字幕在线免费观看| 国产精品一区二区人妻喷水| 四虎成人精品一区二区免费网站| 日韩av福利| 成人午夜免费视频| 成人国产精品久久久久久亚洲| 日韩乱码人妻无码中文字幕| 在线国产一区二区| 中文字幕欧美日韩在线| 亚洲自拍偷拍一区二区| 风间由美一区二区av101| 欧美蜜桃一区二区三区| 熟女少妇精品一区二区| 欧美巨大xxxx做受沙滩| 1024精品合集| 一级二级三级欧美| 噜噜噜噜噜在线视频| 成人av午夜影院| 成人av网站观看| 国产手机av在线| 精品一区二区三区蜜桃| 国产精品大陆在线观看| 日本视频在线观看免费| 99综合在线| 91极品女神在线| 国产奶水涨喷在线播放| 韩国精品一区二区三区| 欧美日本精品在线| 免费在线观看av网址| 伊人青青综合网| 成人444kkkk在线观看| 久久人妻无码aⅴ毛片a片app | 草草视频在线免费观看| 最新超碰在线| 亚洲三级免费观看| 欧美 日韩 国产 在线观看| 日本高清视频在线播放| 亚洲欧洲日本在线| 强开小嫩苞一区二区三区网站 | 亚洲国产精品久久久久爰性色| 久久成人免费网站| 国产一区红桃视频| 国产精品乱码一区二区| 精品影院一区二区久久久| 久久久久国产精品一区三寸| 色偷偷偷综合中文字幕;dd| 黄色国产在线播放| 图片区亚洲欧美小说区| 久久亚洲精品网站| 国产亚洲精品av| 亚洲毛片视频| 国产成人av在线| 亚洲在线观看av| 国产乱人伦精品一区二区在线观看| 69堂成人精品视频免费| 色wwwwww| 国产日本亚洲高清| 伊人色综合影院| 在线播放免费av| 欧美性xxxxx极品| 免费看污污网站| 精品国产亚洲日本| 日韩大片免费观看视频播放| 特级西西www444人体聚色 | 91色视频在线| 亚洲一区三区电影在线观看| 菠萝菠萝蜜在线视频免费观看| 亚洲一区av在线| 黄色片一级视频| 97久久中文字幕| 亚洲精品国产美女| 你懂得视频在线观看| 欧美在线资源| 欧美影院在线播放| 国产三级视频在线播放| 99久久99久久久精品齐齐| 日韩精品一线二线三线| 欧美人与动牲性行为| 色哟哟一区二区| 麻豆网站免费观看| 天堂网av成人| 欧美精品生活片| 国产乱码77777777| 成人网在线播放| 亚洲 日韩 国产第一区| 超碰高清在线| 欧美高清性hdvideosex| 美女脱光内衣内裤| 欧美日韩免费观看一区=区三区| 成人综合婷婷国产精品久久| 81精品国产乱码久久久久久| 国产一区二区自拍视频| 久久亚洲春色中文字幕久久久| 国产精品亚洲天堂| 播放一区二区| 日韩av在线播放资源| 91精品国自产在线| 国产精品美女久久久浪潮软件| 91精品视频观看| 国产中文字幕在线观看| 亚洲v中文字幕| 免费观看黄网站| 色婷婷一区二区三区| 日本午夜在线亚洲.国产| 亚洲精品国产精品乱码不卡| 亚洲色图视频网| 午夜久久久精品| 精品盗摄女厕tp美女嘘嘘| 97视频免费看| 欧美 日韩 中文字幕| 亚洲黄色尤物视频| 三级性生活视频| 久久成人综合| 国产精品亚洲片夜色在线| 蜜桃视频在线观看网站| 欧美日韩性视频在线| 日本人添下边视频免费| 欧美精品国产一区二区| 91超碰在线免费观看| 日本精品一区二区三区在线播放| 欧美自拍偷拍午夜视频| 91网站免费入口| 久久精品一区| 欧美主播一区二区三区美女 久久精品人 | 中文字幕亚洲欧美在线| 国产精品自拍第一页| 久久亚洲影视婷婷| 国产精品69页| blacked蜜桃精品一区| 国产精品久久久久久久电影| 国产爆初菊在线观看免费视频网站 | 成人h动漫免费观看网站| 久久久噜久噜久久综合| 色婷婷中文字幕| 精品露脸国产偷人在视频| 亚洲精品女人久久久| 欧美亚洲三区| 日韩中文一区二区三区| 久久er热在这里只有精品66| 精品国产网站地址| 国产视频aaa| 亚洲国产视频在线| 噜噜噜在线视频| 玖玖视频精品| 亚洲一区二区高清视频| 国产日韩中文在线中文字幕| 欧美激情videos| 天堂在线视频网站| 欧美亚洲一区二区在线观看| 免费精品在线视频| 成人av在线影院| www.色就是色| 亚洲一区二区三区无吗| 国产精品夜夜夜一区二区三区尤| a日韩av网址| www.日韩av.com| 日本黄色大片视频| 欧美性色黄大片| 日本青青草视频| 不卡一区二区三区四区| 日韩肉感妇bbwbbwbbw| 午夜欧美精品| 日本欧美精品久久久| 九九九九九九精品任你躁| 国产91精品久久久久久久| 在线免费看av| 亚洲高清色综合| 中文字幕第2页| 亚洲线精品一区二区三区八戒| 国产特级黄色录像| 国产高清不卡一区| 亚洲中文字幕久久精品无码喷水| 影音先锋成人在线电影| 久久香蕉综合色| 国产精品一区二区精品视频观看| 91爱视频在线| 香蕉久久aⅴ一区二区三区| 亚洲三级 欧美三级| www.黄色小说.com| 欧美性色黄大片| 亚洲免费在线观看av| 亚洲免费观看高清完整| 亚洲女优在线观看| jiyouzz国产精品久久| 在线一区二区不卡| 久久视频一区| 国产男女免费视频| 一区二区免费不卡在线| 免费中文日韩| 高潮按摩久久久久久av免费| 成人欧美一区二区三区黑人| 婷婷激情一区| 91精品国产99| 深夜国产在线播放| 社区色欧美激情 | 国产视频网站在线| 国产视频久久久| 日本黄色一区二区三区| 91精品免费观看| 亚洲精品国产精品国自产网站按摩| 午夜精品在线看| 久草视频免费在线播放| 亚洲日本电影在线| 男女全黄做爰文章| 欧美国产精品中文字幕| 欧美激情aaa| 91麻豆免费看| 精品无码在线视频| 91在线视频播放地址| 精品视频站长推荐| 成人免费高清视频| 久久久久亚洲无码| 成人激情免费电影网址| 日本wwwwwww| 成人夜色视频网站在线观看| 国产伦精品一区二区三区妓女下载| 精品一区二区三区在线观看| 久久撸在线视频| 美腿丝袜亚洲一区| 午夜久久久精品| 久久爱www久久做| 亚欧激情乱码久久久久久久久| 日本一区中文字幕| 美女网站色免费| 狠狠v欧美v日韩v亚洲ⅴ| 天天做天天干天天操| 激情av综合网| 激情图片中文字幕| 国产大陆a不卡| 无码人妻一区二区三区免费n鬼沢| 国产精品99久久久| 国产一卡二卡三卡四卡| 91久色porny| 四虎成人免费影院| 国产精品国产精品国产专区不片| 免费在线观看黄色小视频| 伊人性伊人情综合网| 久久精品视频6| 色综合亚洲欧洲| 五月天中文字幕| 日韩一区二区在线免费观看| 国模无码一区二区三区| 国产视频在线观看一区二区| 国产高清在线| 久久av红桃一区二区小说| 国产精品一区hongkong| 17婷婷久久www| 日本国产欧美| 97久久精品午夜一区二区| 国产精品久久久网站| 免费在线一区二区| 久久久9色精品国产一区二区三区| 亚洲高潮无码久久| 午夜在线观看免费一区| 午夜啪啪小视频| 不卡免费追剧大全电视剧网站| 91久久免费视频| 亚洲欧美另类在线| 日韩欧美成人一区二区三区| 欧美日韩国产一级片| 亚洲av无码乱码在线观看性色| 日韩av在线导航| 久cao在线| 91av成人在线| 日韩福利影视| 精品一区2区三区| 国产精品不卡| 凹凸国产熟女精品视频| 国产一区二区电影| 一区二区三区四区免费| 一区二区三区四区乱视频| 精品国产午夜福利| 日韩午夜在线观看视频| 可以免费看污视频的网站在线| 欧美成人剧情片在线观看| 欧美magnet| 国产精品一级久久久| 国产精品久久久久久久久久10秀 | 日韩电影免费在线观看网站| 美女流白浆视频| 国产精品视频一二三区| 日韩少妇裸体做爰视频| 91精品国产高清一区二区三区蜜臀| 日本高清中文字幕二区在线| 欧美精品手机在线| 亚洲精品aa| 日韩欧美精品一区二区| 99成人精品| 又黄又色的网站| 亚洲欧美另类小说视频| 97人妻精品视频一区| 亚洲精品黄网在线观看| 三级网站视频在在线播放| 国产啪精品视频| 成人精品亚洲| 日本黄网站免费| www.av精品| 国产真实乱偷精品视频| 欧美一区二区视频网站| 尤物网在线观看| 国产激情久久久久| 亚洲成a人片77777在线播放| 99久久国产综合精品五月天喷水| 国产一区二区在线影院| 97精品在线播放| 欧美午夜电影网| 国产精品秘入口| 国产va免费精品高清在线| 欧美成人基地| 男女视频网站在线观看| 成人免费毛片嘿嘿连载视频| 久久精品国产亚洲AV无码男同| 日韩欧美色综合| av毛片在线看| 96成人在线视频| 欧美在线首页| 欧美熟妇另类久久久久久多毛| 成人欧美一区二区三区| 国产一区二区女内射| 日韩亚洲综合在线| 小说区图片区亚洲| 夜夜春亚洲嫩草影视日日摸夜夜添夜| 欧美aaaaaa午夜精品| 日本人亚洲人jjzzjjz| 欧美色爱综合网| 免费观看成人高潮| 亚洲精品免费网站| 欧美精品大片| 第四色在线视频| 欧美色视频日本高清在线观看| 日色在线视频| 国产精品久久久久久久久久新婚| 成人网18免费网站| 污网站在线免费| 一区二区三区中文字幕电影| 成人久久久精品国产乱码一区二区| 欧美激情2020午夜免费观看| 日本韩国欧美超级黄在线观看| 丁香啪啪综合成人亚洲| 欧美国产禁国产网站cc| 一区二区三区播放| 欧美高清无遮挡| 日本国产精品| 天天干天天爽天天射| 伊人色综合久久天天| 天天操天天干天天操| 国产成人涩涩涩视频在线观看| 日韩欧美在线中字| 人妻互换一二三区激情视频| 欧美日韩精品中文字幕| 北条麻妃在线| 51精品国产人成在线观看| 99视频一区| 日本成人免费在线观看| 精品美女一区二区| 在线观看精品| 日本a在线天堂| 久久久久亚洲蜜桃| 精品国产av一区二区三区| 91av视频在线观看| 99久久精品费精品国产风间由美| 国产伦理在线观看| 在线观看日韩精品| 免费男女羞羞的视频网站在线观看| 欧美成人免费在线| 国产一区三区三区| 亚洲午夜18毛片在线看| 久久精品99久久香蕉国产色戒| 欧美调教网站| 亚洲制服中文字幕| 日本福利一区二区| 日本不卡影院| 天堂资源在线亚洲资源| 国产ts人妖一区二区| 最近中文字幕av| 高清一区二区三区四区五区| 欧美mv日韩|