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

alloc、init你弄懂50%了嗎?

移動開發 iOS
這是一篇我記錄對alloc、init分析思考的筆記。如果讀者想看懂我的第二個思考,可能需要您至少了解內存的分段分頁管理,如果您對其一點都不知道,可以先看這篇軟文簡單了解一下。

前言

這是一篇我記錄對alloc、init分析思考的筆記。如果讀者想看懂我的第二個思考,可能需要您至少了解內存的分段分頁管理,如果您對其一點都不知道,可以先看這篇軟文簡單了解一下。另外很重要的一點是,請先思考。

思考1.對象為什么要alloc,init又是干嘛的?

很多人都知道,初始化一個對象應該這么寫:

  1. MyClass* myObj = [MyClass alloc] init]; 

那么有沒有思考過為什么呢?其實我這么寫也是完全可以的:

  1. MyClass *myObj = [MyClass alloc]; 
  2. myObj = [myObj init];  

我們來看看這干了啥。

  1. alloc allocates a chunk of memory to hold the object, and returns the pointer. 

就是說alloc分配了一坨 內存給對象,讓它不釋放,并且把地址返回給指針。

  1. MyClass *myObj = [MyClass alloc]; 

那么這樣過后myobj為什么不能被使用呢?這是因為這片內存還沒有被正確的初始化。

舉個栗子,萬達要修房子,他們第一步一定是要先向政府搞到一塊地,第二步才能在這塊地上動工修樓。

這里操作系統就是政府,alloc就是去爭地,init就是在地上修房子。沒有調用init,房子都沒有修好,別人怎么買房進去住?所以我們需要用init來初始化這片內存:

  1. -init{ 
  2.  
  3.      self=[super init]; // 1. 
  4.  
  5.      if(self){          // 2. 
  6.  
  7.          .... 
  8.  
  9.      } 
  10.  
  11.      return self;       // 3. 
  12.  
  13.  

第一步需要初始化父類的信息,比如實例變量等等。可以理解成王思聰在修房子前要詢問他老爸的意見,他老爸說想娛樂會所,他沒有意見的話就會修成娛樂會所,他如果有意見,就可以悄悄的在第二步里面改為修成LOL俱樂部。第三步就不說了。

最后提醒一下,不要這樣寫:

  1. MyClass* myObj = [MyClass alloc]; 
  2. myObj=[myObj init];  

因為你可能會忘記在第二行加init,并且代碼也會增長。

思考2.關于alloc的思考

在思考1中我們說了:alloc分配了一坨 內存給對象,讓它不釋放,并且把地址返回給指針。這里主要有兩個問題:

  • 調用alloc后內存是直接映射到堆還是只分配給了虛擬內存?
  • 這一坨內存到底是多大?

我們依次來展開。

可能有些讀者不明白第一個問題是什么意思,這里需要額外講一些關于內存的東西,其實這是iOS開發很重要的東西,不管是面試還是學習都可能會用到。

額外的東西

iOS里的內存是有分類的,它分成Clean Memory和Dirty Memory。顧名思義,Clean Memory是可以被操作系統回收的,Dirty Memory是不可被操作系統回收的。

  • Clean Memory:在閃存中有備份,能再次讀取重建。如:

Code(代碼段),framework,memory-mapped files

  • Dirty Memory:所有非Clean Memory,如:

被分配了的堆空間,image cache

舉個栗子,在這樣的代碼中:

  1. - (void)dirtyOrCleanMemory 
  2.  
  3.  
  4.     NSString *str1 = [NSString stringWithString:@"Welcome!"];   // 1. 
  5.  
  6.     NSString *str2 = @"Welcome"; // 2. 
  7.  
  8.      
  9.  
  10.     char *buf = malloc(100 * 1024 * 1024); // 3.分配100M內存給buf 
  11.  
  12.      
  13.  
  14.     for (int i = 0; i < 3 * 1024 * 1024; ++i) { 
  15.  
  16.         buf[i] = rand(); 
  17.  
  18.     } // 4.buf的前3M內存被賦值 
  19.  
  20.  

對每行分析:

1.Dirty Memory。

因為stringWithString:是在堆上分配內存的,如果我們不回收它的話,系統會一直占用這塊內存。

2.Clean Memory。

因為用這樣的方法創建的是一個常量字符串,常量字符串是放在只讀數據段的,如果這塊內存被釋放了,而我們又訪問它的時候,操作系統可以在只讀數據段中把值再讀取出來重建這塊內存。(ps:所以用這種方法創建的string是沒有引用計數的。)

接下來的知識就是引出思考問題1、2比較重要的點了:

3.Clean Memory。

這個時候buf指向的100M內存區域是Clean Memory的,因為操作系統是很懶的,只有當我們要用到這塊區域的時候才會映射到物理內存,沒有使用的時候只會分配一塊虛擬內存給buf。讀起來很繞口,上張圖:  

 

 

可以看到虛擬內存和物理內存沒有映射關系,所以是Clean Memory的。

4.Dirty & Clean Memory混合。

前3M是Dirty Memory,后97M是Clean Memory。這句for語句執行完成后,buf的前3M內存被賦值,也就是buf的前3M被使用了,所以這個時候的映射關系是這樣的: 

 

額外的東西Done.

回到主線

調用alloc后內存是直接映射到堆(物理內存)還是只分配給了虛擬內存?

一坨內存的一坨是多大?

這個時候我們的第一個問題讀者應該能明白了。那么我們怎么驗證alloc是直接映射到堆上還是只分配給虛擬內存呢?這個問題讓我想了好些天,最后xo哥想到了一劑良藥來驗證,那就是用instrument來推反。

使用instrument來證反

我們假設的論點是:對象收到alloc消息后只在虛擬內存分配空間。

這里需要一丁點代碼。

1.我們隨便新建個工程。

2.然后做個model類:

  1. #import <Foundation/Foundation.h> 
  2.  
  3.   
  4.  
  5. @interface XOModel : NSObject 
  6.  
  7.  
  8.     int a1; 
  9.  
  10.     NSString *a2; 
  11.  
  12.  
  13.   
  14.  
  15. @end  

3.在controller里給view加一個點擊事件:

  1. - (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event { 
  2.  
  3.     for (int i = 0; i < 100000; ++i) { 
  4.  
  5.         XOModel *model = [XOModel alloc]; // 注意這句只有alloc 
  6.  
  7.         [self.array addObject:model]; 
  8.  
  9.     } 
  10.  
  11.  

4.打開instrument的alloction,運行觸發一下點擊事件,查看如下:   

 

(圖解:Persistent bytes表示所有的這類東西在堆里的大小,Persistent表示所有的這類東西的個數.)

我們發現發現在Persistent bytes(堆)里實實在在地分配給了XOModel 3.05MB的空間。

我們再觸發一下點擊事件:   

 

發現堆分配給了XOModel的大小空間變成了原來的兩倍6.10MB。

結論過渡:如果對象收到alloc消息只在虛擬內存分配空間,那么persistent bytes(堆)里是不會分配給XOModel大小的,也就是說這里的persistent bytes大小應該是0。所以問題1的結論如下:

結論:alloc不只分配在虛擬內存,同時會在物理內存建立映射。

對象的內存分配

最后剩下我們的最后一個問題:類對象收到alloc消息后,操作系統會分配出來的一坨內存是多大?

3.05M的大小是100000個XOModel對象的總和,那么一個XOModel的實例對象,操作系統會給他分配多大的空間呢?很簡單嘛,3.05M/100000就得到了,等等,難道你真準備這樣去算?好吧,其實一開始我真這樣想過,但是這肯定是算不出準確答案的,關鍵是你要去思考。

這里有兩種辦法,我采用的第二種辦法。

第一種驗證方法還是instrument

我們可以修改一下觸發的代碼,然后重新刷新instrument查看XOModel大小,具體操作同上,不重復了:

  1. - (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event { 
  2.  
  3.     for (int i = 0; i < 1; ++i) { // 修改處 
  4.  
  5.         XOModel *model = [XOModel alloc]; // 注意這句只有alloc 
  6.  
  7.         [self.array addObject:model]; 
  8.  
  9.     } 
  10.  
  11.  

第二種驗證辦法借用runtime

我們可以借助runtime來查看一個類對象所需要的內存大小。值得一提的是我最開始用的方法是class_getInstanceSize,原型如下:

  1. /** 
  2.  
  3. Returns the size of instances of a class. 
  4.  
  5.  
  6. * @param cls A class object. 
  7.  
  8.  
  9. * @return The size in bytes of instances of the class \e cls, or \c 0 if \e cls is \c Nil. 
  10.  
  11. */ 
  12.  
  13. OBJC_EXPORT size_t class_getInstanceSize(Class cls) 
  14.  
  15.      __OSX_AVAILABLE_STARTING(__MAC_10_5, __IPHONE_2_0);  

貌似是我們需要的函數,但是我發現這個方法有bug,返回的size和instruments的值不同,后來又發現有人遇到同樣的問題,所以摘抄了另一種方法,代碼如下: 

  1. #import <objc/runtime.h> 
  2.  
  3. #import <malloc/malloc.h> 
  4.  
  5. ... 
  6.  
  7. - (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event { 
  8.  
  9.     XOModel *model = [XOModel alloc]; 
  10.  
  11.     [self.array addObject:model]; 
  12.  
  13.      
  14.  
  15.     NSLog(@"Size of %<a href="http://www.jobbole.com/members/q697158886">@:</a> %zd", NSStringFromClass([XOModel class]), malloc_size((__bridge const void *) model)); 
  16.  
  17.  

再貼下XOModel代碼:

  1. #import <Foundation/Foundation.h> 
  2.  
  3.   
  4.  
  5. @interface XOModel : NSObject 
  6.  
  7.  
  8.     int a1; 
  9.  
  10.     NSString *a2; 
  11.  
  12.  
  13.   
  14.  
  15. @end  

在iPhone 6(或其他64位)的機子上運行,輸出如下:

  1. AllocTest[38470:2551068] Size of XOModel: 32 

“啊咧,我一個int,一個指針你分給我32個字節,操作系統你是腦子進屎了嗎?”

我們再修改一下XOModel代碼,不要實例變量:

  1. #import <Foundation/Foundation.h> 
  2.  
  3.   
  4.  
  5. @interface XOModel : NSObject 
  6.  
  7.  
  8.  
  9.   
  10.  
  11. @end  

輸出如下:

  1. AllocTest[38630:2562602] Size of XOModel: 16 

“我靠,我什么東西都沒有,操作系統你還要分給我16個字節,是不是傻?”

智慧的操作系統這樣做當然是有它自己的原因滴,這里我們需要知道三個東西:

  1. 任何類對象都有一個isa指針,需要分配內存。
  2. 32位機子上指針大小為4字節,64位機子為8字節。
  3. 字節對齊。

第一點就不說了,不知道的話您多半也沒耐心看到現在了。

第二點貼個文檔圖,iOS7過后部分蘋果機就開始從32位操作系統轉到64位了,所以部分數據類型的大小也有變化,這里我們主要關注例子中的指針:   

 

現在,基于這兩點對樣例分析。

  • 第一個樣例(類對象中一個int,一個NSString指針,一個isa指針),64位操作系統上應該是4+8+8=20,然而輸出是32,不對。
  • 第二個樣例(類對象中只有一個isa指針),64位操作系統上應該是8,然而輸出是16,還是不對。why?

字節對齊

字節對齊我了解得也不是太多,簡單點講目的就是為了提高存取效率,概念就不展開了,可以看這個,我這里就直接講原理了。先貼一份蘋果的文檔:

When allocating any small blocks of memory, remember that the granularity for blocks allocated by the malloc library is 16 bytes. Thus, the smallest block of memory you can allocate is 16 bytes and any blocks larger than that are a multiple of 16. For example, if you call malloc and ask for 4 bytes, it returns a block whose size is 16 bytes; if you request 24 bytes, it returns a block whose size is 32 bytes. Because of this granularity, you should design your data structures carefully and try to make them multiples of 16 bytes whenever possible.

有點長,簡單的意思就是:

當我們分配一塊內存的時候,假設需要的內存小于16個字節,操作系統會直接分配16個字節;加入需要的內存大于16個字節,操作系統會分配a*16個字節。舉個栗子,如果你調用malloc并且需要4個字節,系統會給你一塊16個字節的內存塊;如果你調用malloc并且需要24個字節,系統會給你一塊32個字節的內存塊。

現在再看我們的栗子,就可以直接上圖了:

第一個例子不對齊應該是20字節,對齊就是32字節。   

 

第二個例子不對其應該是8字節,對齊就是16字節:  

 

 

ps:在32位機器上可能會有不一樣的結果,因為指針大小不同,但是32位的蘋果機也是16字節對齊的。

至此我們對alloc的探究就結束了。

結語

這次的探究算是比較徹底了,過程當中也學到了很多東西,在這個浮躁的社會,學貴在道,術次之,打好基礎、保持思考才不會磨滅掉你對它最初的興趣。

參考鏈接:(由于微信不允許發鏈接,可點擊原文進行查看)

  • iOS內存管理及優化-騰訊莊延軍
  • Checking the size of an object in Objective-C – Stack Overflow
  • Does class_getInstanceSize have a known bug about returning incorrect sizes? – Stack Overflow
  • Memory Usage Performance Guidelines – 蘋果文檔
  • 字節對齊-百度百科

Done

 

責任編輯:龐桂玉 來源: iOS大全
相關推薦

2013-07-25 13:15:55

iOS開發學習new與allocinit區別

2021-10-12 10:50:31

鴻蒙HarmonyOS應用

2021-09-15 11:41:53

Linux cdevLinux 系統

2012-01-13 13:05:41

Scale Out網絡

2009-06-22 14:36:09

ITIL運維管理摩卡軟件

2012-08-29 09:44:20

免費增值

2010-08-04 15:01:00

2012-03-12 13:47:05

移動廣告

2013-07-15 16:55:45

2024-01-19 08:25:38

死鎖Java通信

2021-11-23 20:22:54

貪心數量策略

2009-09-15 13:33:38

SOA架構

2021-09-09 06:55:44

Docker權限cgroup

2019-11-20 10:50:36

轉網運營商流量

2022-12-30 08:35:00

2024-08-13 08:30:13

2023-01-10 08:43:15

定義DDD架構

2012-02-27 10:02:06

云計算

2012-01-16 10:41:25

安全互聯網IT部門

2022-04-01 08:23:17

InputstreString字符串
點贊
收藏

51CTO技術棧公眾號

国产91视频在线| 国产黄色录像视频| 成人免费短视频| 欧美国产精品一区二区三区| 91美女高潮出水| 久久久久久久99| 欧美日韩色图| 精品免费视频一区二区| 日本精品一区二区三区四区 | 精品国产乱码久久久久久久久| 亚洲熟妇无码一区二区三区| 成人精品一区二区三区校园激情| 久久精品国产成人一区二区三区| 欧美丰满少妇xxxxx| 老牛影视av老牛影视av| 影音先锋欧美激情| 欧美日免费三级在线| 国产成人在线小视频| 成人高清免费观看mv| 懂色av一区二区三区免费观看| 国产成人精品国内自产拍免费看| 午夜少妇久久久久久久久| 欧美女优在线视频| 日韩欧美成人午夜| av在线网址导航| 欧美舌奴丨vk视频| 亚洲成av人综合在线观看| 伊人色综合久久天天五月婷| 日本一区二区三区在线观看视频| 国产在线精品一区二区三区不卡| 国产成人黄色av| 久久精品国产亚洲av高清色欲| 日韩大片在线播放| 亚洲人成毛片在线播放| 2一3sex性hd| 99久久婷婷国产综合精品青牛牛 | 中文久久久久久| 午夜不卡影院| 午夜不卡在线视频| 成人免费在线视频播放| 国产精品久久久久久福利| 国产日韩欧美精品电影三级在线| 久久爱av电影| 特级丰满少妇一级aaaa爱毛片| 国产精品小仙女| 91视频免费网站| 国产孕妇孕交大片孕| 免费在线一区观看| 国产精品美女免费| 中国一区二区视频| 久久精品国产精品青草| 成人精品久久av网站| 中文字幕乱码一区二区| 日本sm残虐另类| 国产精品黄色av| 97人妻精品视频一区| 久久久久久久波多野高潮日日| 欧美一级片一区| 国产精品久久久久久99| 亚洲欧美清纯在线制服| 日本成人在线视频网址| 区一区二在线观看| 久久国产乱子精品免费女| 国产精品视频久久久| 一区二区三区免费在线视频| 激情综合色丁香一区二区| 成人午夜两性视频| 国产后入清纯学生妹| 国产不卡视频一区二区三区| 国产高清自拍99| 亚洲欧洲综合在线| 国产婷婷色一区二区三区| 少妇特黄a一区二区三区| 午夜老司机在线观看| 亚洲美女区一区| 大西瓜av在线| 国产精品专区免费| 欧美剧情电影在线观看完整版免费励志电影 | av观看在线| 亚洲一区二区在线免费看| 精品久久久久久久久久中文字幕| 伊人久久综合一区二区| 欧美日韩精品系列| 国产在线观看免费播放| 婷婷综合一区| 日韩三级影视基地| 日韩少妇高潮抽搐| 男女视频一区二区| 国产精华一区二区三区| 天天综合网在线观看| 日本一区二区三区dvd视频在线| 亚洲国产精品影视| av资源在线播放| 欧美亚洲综合久久| 免费黄色av网址| 国产调教一区二区三区| 欧美成人免费va影院高清| 日韩激情在线播放| 精品一区二区三区在线观看国产 | 亚洲精品无amm毛片| 国产亚洲污的网站| 岛国大片在线播放| 欧美网站免费| 日韩电影网在线| 国产激情无码一区二区三区| av成人天堂| 91免费在线视频网站| 色天堂在线视频| 一区二区在线观看免费视频播放| 日韩中文字幕组| 综合伊人久久| 色综合伊人色综合网| 久久亚洲精品国产| 国产激情一区二区三区| 色999五月色| 天堂中文在线播放| 精品久久久久久久一区二区蜜臀| 亚洲图片第一页| 免费在线观看成人av| 成人18视频| 日韩伦理在线观看| 一本色道久久综合亚洲aⅴ蜜桃| 无码人妻少妇色欲av一区二区| 精品一区二区三区的国产在线观看| 国内精品久久久久影院 日本资源| 一女二男一黄一片| 日本一区二区视频在线| 久久婷婷国产精品| 欧美1区二区| 色综合天天狠天天透天天伊人| 在线视频你懂得| 国产欧美精品一区二区三区四区 | 亚洲美女av在线播放| 麻豆国产尤物av尤物在线观看| 麻豆视频观看网址久久| 日韩高清专区| 韩国久久久久久| 亚洲女在线观看| 亚洲伊人成人网| 99re成人在线| 无码专区aaaaaa免费视频| 一区二区三区欧洲区| 久久综合伊人77777尤物| 91国产精品一区| 中文字幕一区二区不卡| 波多野结衣天堂| 欧美天天综合| 国产精品视频导航| av在线电影网| 欧美三级电影在线看| av在线播放中文字幕| 久久国产精品免费| 99热一区二区三区| 亚洲精品黑牛一区二区三区| 欧美黄色成人网| 免费成人在线看| 富二代精品短视频| 在线观看日本中文字幕| 免费在线观看视频一区| 久久免费看毛片| av不卡一区二区| 欧美孕妇与黑人孕交| 精品福利视频导航大全| 欧美性猛片aaaaaaa做受| 国产大屁股喷水视频在线观看| 精品在线一区二区| 黄色激情在线视频| 天堂99x99es久久精品免费| 国产成人综合av| 日本中文在线观看| 精品久久久久久久久久久久久久久| 日本少妇全体裸体洗澡| 久久伊人中文字幕| 欧美美女性视频| 欧美成人一区二免费视频软件| 国产专区一区二区| 丁香六月综合| 麻豆乱码国产一区二区三区| 亚洲成人一级片| 欧美视频在线观看 亚洲欧| 国产午夜福利一区| 国产盗摄女厕一区二区三区| 日本欧美视频在线观看| 欧洲美女日日| 2022国产精品| 黑人巨大亚洲一区二区久 | 欧美精品欧美精品| 久久99国产精品二区高清软件| 精品中文字幕在线| 天天av综合网| 8v天堂国产在线一区二区| 国产一级做a爱免费视频| 久久蜜桃香蕉精品一区二区三区| 污视频网站观看| 在线观看的日韩av| 天天综合色天天综合色hd| 国产一区二区三区视频在线| 7777精品久久久久久| 欧美96在线| 亚洲男人7777| 午夜免费福利视频| 欧美中文字幕一区二区三区 | 疯狂蹂躏欧美一区二区精品| 天天做夜夜爱爱爱| 91丨porny丨国产入口| 在线看免费毛片| 亚洲综合社区| 欧美交换配乱吟粗大25p| 俺要去色综合狠狠| 好吊妞www.84com只有这里才有精品| 国模一区二区| 性色av一区二区三区| 免费a级在线播放| 日韩av在线网| 草逼视频免费看| 欧美日韩在线播放一区| 日韩经典在线观看| 一区二区在线免费观看| 国产真实乱在线更新| 国产视频一区二区三区在线观看 | 国产亚洲欧美一级| 99re这里只有| 国产91精品露脸国语对白| 天天操天天爱天天爽| 一区二区三区高清视频在线观看| 强伦女教师2:伦理在线观看| 神马影视一区二区| 久久精品二区| 成人偷拍自拍| 97超碰资源| 国产电影一区| 国产在线播放91| 国产精品诱惑| 国产精品国模在线| 婷婷综合六月| 日本精品视频在线| 在线女人免费视频| 韩国三级电影久久久久久| aaa大片在线观看| 久久久国产精品视频| 在线观看麻豆蜜桃| 最近2019好看的中文字幕免费| 国产在线一二三| 亚洲色图国产精品| 六十路在线观看| 亚洲社区在线观看| 国产高清一区在线观看| 亚洲视频综合网| 国产九色在线| 在线视频亚洲欧美| 免费在线看a| 欧美成人全部免费| 色www永久免费视频首页在线| 久久中文字幕在线| 人人超在线公开视频| 欧美激情一区二区三区高清视频| 麻豆av在线播放| 欧美精品videosex牲欧美| 国产美女高潮在线观看| 8x拔播拔播x8国产精品| 日韩免费电影| 国产精品视频久久久久| 国产精久久久| 成人片在线免费看| 亚欧日韩另类中文欧美| 欧美中日韩免费视频| 日韩综合在线| 无码毛片aaa在线| 狠狠88综合久久久久综合网| 成人中文字幕在线播放| 久久综合九色| 欧美国产日韩另类 | 欧美男生操女生| av网站在线免费看| 亚洲韩国日本中文字幕| 大胆av不用播放器在线播放 | 精品久久久久久久久久久久久久久久久 | 久久伊人一区二区| 国产中文字幕一区二区三区| 欧美 另类 交| 亚洲精品社区| 九九热在线免费| 国产凹凸在线观看一区二区| 内射中出日韩无国产剧情| 国产精品久久久久影视| 久久久久久久久久综合| 色噜噜狠狠色综合中国| 97免费观看视频| 日韩精品在线视频| 香蕉视频在线看| 69视频在线免费观看| 四虎成人精品一区二区免费网站| 国产精品theporn88| 国产精品羞羞答答在线观看| 男插女免费视频| 男人天堂欧美日韩| 久久发布国产伦子伦精品| 26uuu精品一区二区三区四区在线 26uuu精品一区二区在线观看 | 色与欲影视天天看综合网| 欧美无毛视频| 操一操视频一区| 久久国产成人精品| 欧美三级在线观看视频| 极品少妇xxxx精品少妇偷拍| 国产熟妇搡bbbb搡bbbb| 一区二区三区视频在线看| 久久久久在线视频| 精品国产伦理网| 日本三级视频在线播放| 浅井舞香一区二区| 亚洲国产欧美国产第一区| 手机看片福利永久国产日韩| 亚洲激情网站| 日本黄色www| 国产精品久久久久一区二区三区| 亚洲国产综合久久| 欧美一区二区私人影院日本| 国产一二三在线观看| 97香蕉久久超级碰碰高清版| 久久国产精品免费一区二区三区| 日本午夜精品电影| 国产精品视区| 中国一级特黄录像播放| 一区二区三区中文在线观看| 91精品人妻一区二区三区果冻| 亚洲人成网站999久久久综合| aa级大片免费在线观看| 亚洲在线一区二区| 久久精品亚洲人成影院 | 国产一区二区三区免费观看在线| 日本在线成人一区二区| 国产欧美日韩一区二区三区在线| 日本泡妞xxxx免费视频软件| 亚洲图片激情小说| 国产精品永久久久久久久久久| 一区二区三区www| 日韩电影网站| 天天综合色天天综合色hd| 首页综合国产亚洲丝袜| 欧洲女同同性吃奶| 欧美视频中文字幕在线| 无码精品视频一区二区三区| 久久久之久亚州精品露出| 9999久久久久| 无码av天堂一区二区三区| 不卡的av在线播放| 日本网站在线免费观看| 精品剧情v国产在线观看在线| 青青草原国产在线| 成人在线视频电影| 亚洲激情二区| 中文字幕一区三区久久女搜查官| 亚洲成人av福利| 五月激情婷婷网| 91爱视频在线| 九一国产精品| 午夜宅男在线视频| 综合久久综合久久| 99精品在线视频观看| 欧美寡妇偷汉性猛交| 国产精品极品国产中出| 日韩欧美不卡在线| 91丨九色porny丨蝌蚪| 亚洲色成人www永久网站| 深夜福利日韩在线看| 国产日韩欧美中文在线| www.激情网| 91网页版在线| 最好看的日本字幕mv视频大全| 视频直播国产精品| 18国产精品| 六月丁香婷婷激情| 中文字幕av一区二区三区高 | 99久久99久久精品国产片果冻| 无码人妻精品一区二区三区蜜桃91 | 真人bbbbbbbbb毛片| 欧美少妇bbb| 天堂av最新在线| 欧美在线日韩精品| 国内外成人在线| 久久久精品人妻一区二区三区四 | 欧美视频精品在线| 中文在线免费| 乱色588欧美| 狠狠色丁香九九婷婷综合五月| 精品深夜av无码一区二区老年| 亚洲精品一区二区三区不| 免费成人黄色网| 久久99久久99精品| 国产精品网站在线观看| www夜片内射视频日韩精品成人| 欧洲s码亚洲m码精品一区| 图片区亚洲欧美小说区| 亚洲香蕉中文网| 欧美中文字幕久久| 丰满诱人av在线播放| 亚洲人成网站在线观看播放| 懂色av一区二区夜夜嗨| 国产九色91回来了| 午夜精品国产精品大乳美女|