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

block 解析 - 內存

移動開發 iOS
block結構體相應的也有一個成員引用,這樣會增加對局部變量的 _para1引用,在Block銷毀的時候引用就釋放掉了

我們了解到了用__block修飾的變量,可以在block內部修改,__block變量其實對應一個結構體

  1. struct __Block_byref__para1_0 { 
  2.   void *__isa; 
  3. __Block_byref__para1_0 *__forwarding; 
  4.  int __flags; 
  5.  int __size; 
  6.  char *_para1; 
  7. }; 

block結構體相應的也有一個成員引用,這樣會增加對局部變量的 _para1引用,在Block銷毀的時候引用就釋放掉了

  1. struct __main1_block_impl_0 { 
  2.   struct __block_impl impl; 
  3.   struct __main1_block_desc_0* Desc; 
  4.   __Block_byref__para1_0 *_para1; // by ref 

block內部 成員變量 使用,可以在block內部修改,對應一個、多個成員變量參數,block結構體內部有一個成員引用

  1. struct __KDBlockTest__test3_block_impl_0 { 
  2.   struct __block_impl impl; 
  3.   struct __KDBlockTest__test3_block_desc_0* Desc; 
  4.   KDBlockTest *self; 

這樣會增加對self的引用,在Block銷毀的時候引用就釋放掉了

循環引用

在使用的時候需要注意循環引用,即某個對象有一個copy或者strong的 block成員屬性,這時block內部直接引用了 成員變量(全局變量) 或者self,這樣就產生了self持有 block成員,block成員又持有了self,就會導致循環引用。

我們看以下代碼(ARC):

  1. typedef void(^ActionTest)(void); 
  2. @interface KDBlockTest() 
  3.     __block NSString *_person2; 
  4.     ActionTest _action; 
  5. }
  1. @implementation KDBlockTest 
  2. #pragma mark - system 
  3. -(instancetype)init 
  4.     self=[super init]; 
  5.     if(self) 
  6.     { 
  7.         [self test3]; 
  8.     } 
  9.     return self; 
  10. -(void)dealloc 
  11.     NSLog(@"KDBlockTest dealloc"); 
  12.  
  13. #pragma mark - private 
  14. ////循環引用 
  15. -(void )test3 
  16.     _person2=@"person2"
  17.     _action= ^(void) { 
  18.         //block內賦值 
  19.         NSLog(@"excuteing _person2:%@,%p",_person2,_person2); 
  20.     }; 
  21.     _action(); 

這樣我們執行以下代碼:

  1. KDBlockTest *_test=[[KDBlockTest alloc]init]; 

通過調試發現沒有走到dealloc,這里不管成員變量 _person2 是否聲明 __block都沒有什么影響。

成員變量 這一篇已經詳細介紹了,對于block 使用 成員變量、self來說,block內部是直接強引用self的。也就是block持有了self,在這里bock又作為self的一個成員被持有,所以就形成了相互引用,導致無法釋放。

——weak

對于上面這種情況,我們引入了__weak解決,__weak不會增加對象的引用計數,而且當指向的內存銷毀后,__weak指針會自動置為nil。

我們對上面的代碼稍作修改

 

  1. -(void )test3 
  2.     __weak typeof(self) _weakSelf=self; 
  3.     _person2=@"person2"
  4.     NSLog(@"init:%@,%p,%p",_person2,_person2,&self); 
  5.     _action= ^(void) { 
  6.         //block內賦值 
  7.         NSLog(@"excuteing _person2:%@,%p,%p",_weakSelf.person2,_weakSelf.person2,&_weakSelf); 
  8.     }; 
  9.     _action(); 

輸出日志:

2014-07-29 13:38:30.872 Test[2642:60b] init:person2,0x5b980,0x27dae944
2014-07-29 13:38:30.875 Test[2642:60b] excuteing _person2:person2,0x5b980,0x1562ed44
2014-07-29 13:38:30.876 Test[2642:60b] KDBlockTest dealloc

從日志可以看出block內部使用 person2 、_weakSelf 和外面的 person2 、self 地址是一樣的,看來也是引用關系,既達到block內部修改變量的效果,又沒有對變量產生強引用。我們來看下轉換后的代碼:

block結構體的定義:

  1. struct __KDBlockTest__test3_block_impl_0 { 
  2.   struct __block_impl impl; 
  3.   struct __KDBlockTest__test3_block_desc_0* Desc; 
  4.   __weak typeof (self) _weakSelf; 
  5.   __KDBlockTest__test3_block_impl_0(void *fp, struct __KDBlockTest__test3_block_desc_0 *desc, __weak typeof (self) __weakSelf, int flags=0) : _weakSelf(__weakSelf) { 
  6.     impl.isa = &_NSConcreteStackBlock; 
  7.     impl.Flags = flags; 
  8.     impl.FuncPtr = fp; 
  9.     Desc = desc; 
  10.   } 
  11. }; 

重點就在這,使用_weak聲明的self,block結構體對應 也生成了一個_weak的self成員。我們在看下 我們的test3 方法:

  1. static void _I_KDBlockTest_test3(KDBlockTest * self, SEL _cmd) { 
  2.     __attribute__((objc_gc(weak))) typeof(self) _weakSelf=self; 
  3.     (*(NSString **)((char *)self + OBJC_IVAR_$_KDBlockTest$_person2))=(NSString *)&__NSConstantStringImpl__var_folders_5l_2l25j3tn0wl_3zy1hpsq1rhc0000gp_T_KDBlockTest_d10f18_mi_1; 
  4.     NSLog((NSString *)&__NSConstantStringImpl__var_folders_5l_2l25j3tn0wl_3zy1hpsq1rhc0000gp_T_KDBlockTest_d10f18_mi_2,(*(NSString **)((char *)self + OBJC_IVAR_$_KDBlockTest$_person2)),(*(NSString **)((char *)self + OBJC_IVAR_$_KDBlockTest$_person2)),&self); 
  5.     (*(ActionTest *)((char *)self + OBJC_IVAR_$_KDBlockTest$_action))= (void (*)())&__KDBlockTest__test3_block_impl_0((void *)__KDBlockTest__test3_block_func_0, &__KDBlockTest__test3_block_desc_0_DATA, _weakSelf, 570425344); 
  6.     ((void (*)(__block_impl *))((__block_impl *)(*(ActionTest *)((char *)self + OBJC_IVAR_$_KDBlockTest$_action)))->FuncPtr)((__block_impl *)(*(ActionTest *)((char *)self + OBJC_IVAR_$_KDBlockTest$_action))); 

block初始化的時候把  _weakSelf的地址傳入,block內部對_weakSelf進行弱引用。在執行block的時候

  1. static void __KDBlockTest__test3_block_func_0(struct __KDBlockTest__test3_block_impl_0 *__cself) { 
  2.   __weak typeof (self) _weakSelf = __cself->_weakSelf; // bound by copy 
  3.  
  4.  
  5.         NSLog((NSString *)&__NSConstantStringImpl__var_folders_5l_2l25j3tn0wl_3zy1hpsq1rhc0000gp_T_KDBlockTest_d10f18_mi_3,((NSString *(*)(id, SEL))(void *)objc_msgSend)((id)_weakSelf, sel_registerName("person2")),((NSString *(*)(id, SEL))(void *)objc_msgSend)((id)_weakSelf, sel_registerName("person2")),&_weakSelf); 
  6.     } 

通過取得block結構體的 弱引用對象self 成員來訪問相對應的方法 person2 (給對象發消息)。

—weak變量

上面例子,我們稍作修改:

  1. (void )test3 
  2.     _person2=@"person2"
  3.     __weak typeof(_person2) _weakPerson2=_person2; 
  4.     NSLog(@"init:%@,%p,%p",_person2,_person2,&_person2); 
  5.     NSLog(@"init weak:%@,%p,%p",_weakPerson2,_weakPerson2,&_weakPerson2); 
  6.     _action= ^(void) { 
  7.         //block內賦值 
  8.     //_weakPerson2=@"person4";//error ,不能修改 
  9.  
  10.         NSLog(@"excuteing _person2:%@,%p,%p",_weakPerson2,_weakPerson2,&_weakPerson2); 
  11.     }; 
  12.     _person2=@"person22"
  13.     NSLog(@"before:%@,%p,%p",_person2,_person2,&_person2); 
  14.     NSLog(@"before weak:%@,%p,%p",_weakPerson2,_weakPerson2,&_weakPerson2); 
  15.     _action(); 
  16.     NSLog(@"after:%@,%p,%p",_person2,_person2,&_person2); 

輸出日志:

2014-07-29 15:29:33.472 Test[2719:60b] init:person2,0x5397c,0x16566db8
2014-07-29 15:29:33.475 Test[2719:60b] init weak:person2,0x5397c,0x27db693c
2014-07-29 15:29:33.476 Test[2719:60b] before:person22,0x539bc,0x16566db8
2014-07-29 15:29:33.477 Test[2719:60b] before weak:person2,0x5397c,0x27db693c
2014-07-29 15:29:33.479 Test[2719:60b] excuteing _person2:person2,0x5397c,0x165b5be4
2014-07-29 15:29:33.480 Test[2719:60b] after:person22,0x539bc,0x16566db8
2014-07-29 15:29:33.481 Test[2719:60b] KDBlockTest dealloc

從日志可以看出:

  1. 直接用__weak修飾符修飾_person2變量也可以,也可以避免循環引用,但是不可以在block內部修改外部 參數的值
  2. 在block外部修改變量指針指向,即把指針指向另外一塊內存,block內部無法更新到。

我們來看下轉換后的代碼:其實和不加__block的局部變量差不多,無非多了一個弱引用,不會對引用計數有影響。

 

  1. struct __KDBlockTest__test3_block_impl_0 { 
  2.   struct __block_impl impl; 
  3.   struct __KDBlockTest__test3_block_desc_0* Desc; 
  4.   __weak typeof (self->_person2) _weakPerson2; 
  5.   __KDBlockTest__test3_block_impl_0(void *fp, struct __KDBlockTest__test3_block_desc_0 *desc, __weak typeof (self->_person2) __weakPerson2, int flags=0) : _weakPerson2(__weakPerson2) { 
  6.     impl.isa = &_NSConcreteStackBlock; 
  7.     impl.Flags = flags; 
  8.     impl.FuncPtr = fp; 
  9.     Desc = desc; 
  10.   } 
  11. }; 
  1. static void _I_KDBlockTest_test3(KDBlockTest * self, SEL _cmd) { 
  2.  
  3.     (*(NSString **)((char *)self + OBJC_IVAR_$_KDBlockTest$_person2))=(NSString *)&__NSConstantStringImpl__var_folders_5l_2l25j3tn0wl_3zy1hpsq1rhc0000gp_T_KDBlockTest_f32cef_mi_1; 
  4. //聲明_weak 變量 
  5.     __attribute__((objc_gc(weak))) typeof(_person2) _weakPerson2=(*(NSString **)((char *)self + OBJC_IVAR_$_KDBlockTest$_person2)); 
  6.     NSLog((NSString *)&__NSConstantStringImpl__var_folders_5l_2l25j3tn0wl_3zy1hpsq1rhc0000gp_T_KDBlockTest_f32cef_mi_2,(*(NSString **)((char *)self + OBJC_IVAR_$_KDBlockTest$_person2)),(*(NSString **)((char *)self + OBJC_IVAR_$_KDBlockTest$_person2)),&(*(NSString **)((char *)self + OBJC_IVAR_$_KDBlockTest$_person2))); 
  7.     NSLog((NSString *)&__NSConstantStringImpl__var_folders_5l_2l25j3tn0wl_3zy1hpsq1rhc0000gp_T_KDBlockTest_f32cef_mi_3,_weakPerson2,_weakPerson2,&_weakPerson2); 
  8. //初始化block 
  9.     (*(ActionTest *)((char *)self + OBJC_IVAR_$_KDBlockTest$_action))= (void (*)())&__KDBlockTest__test3_block_impl_0((void *)__KDBlockTest__test3_block_func_0, &__KDBlockTest__test3_block_desc_0_DATA, _weakPerson2, 570425344); 
  10.     (*(NSString **)((char *)self + OBJC_IVAR_$_KDBlockTest$_person2))=(NSString *)&__NSConstantStringImpl__var_folders_5l_2l25j3tn0wl_3zy1hpsq1rhc0000gp_T_KDBlockTest_f32cef_mi_5; 
  11.     NSLog((NSString *)&__NSConstantStringImpl__var_folders_5l_2l25j3tn0wl_3zy1hpsq1rhc0000gp_T_KDBlockTest_f32cef_mi_6,(*(NSString **)((char *)self + OBJC_IVAR_$_KDBlockTest$_person2)),(*(NSString **)((char *)self + OBJC_IVAR_$_KDBlockTest$_person2)),&(*(NSString **)((char *)self + OBJC_IVAR_$_KDBlockTest$_person2))); 
  12.     NSLog((NSString *)&__NSConstantStringImpl__var_folders_5l_2l25j3tn0wl_3zy1hpsq1rhc0000gp_T_KDBlockTest_f32cef_mi_7,_weakPerson2,_weakPerson2,&_weakPerson2); 
  13.     ((void (*)(__block_impl *))((__block_impl *)(*(ActionTest *)((char *)self + OBJC_IVAR_$_KDBlockTest$_action)))->FuncPtr)((__block_impl *)(*(ActionTest *)((char *)self + OBJC_IVAR_$_KDBlockTest$_action))); 

在聲明 _weak變量的時候,生成了一個 弱引用的指針 指向 self的person2變量。在block初始化的時候,把弱引用指針指向的內容地址 傳遞給了block成員

__weak typeof (self->_person2) _weakPerson2;

block結構體內部通過 成員 _weakPerson2 直接弱引用了外部變量 person2的內容地址。這時候如果把person2指針指向另外一塊內存地址,那么肯定是同步不到block內部的,這個和 局部變量  大同小異。

總結:

  1. 聲明 __weak typeof(self) _weakSelf=self;  這樣block內部 生成一個成員 ,會對self弱引用,對于值類型、引用類型都可以修改,并且修改指針指向都可以同步到任何地方。
  2. 聲明 __weak typeof(_person2) _weakPerson2=_person2;  針對某個具體的成員變量使用weak修飾符,這樣可以避免循環引用,并且不能再block內部修改_weakPerson2。規則如下:
    • 對值類型的修改,如果block初始化后,對值類型修改,無法同步到block內部。
    • 對于引用類型的修改,如果block初始化后,修改指針指向,即指向另外一塊內存,這樣也是無法同步到block內部

       

      對于引用類型的修改,如果block初始化后,對指針指向的內存進行修改,即NSMutableArray add 、remove操作,這樣是可以用同步到block內部。

責任編輯:chenqingxiang 來源: cnblogs
相關推薦

2014-07-31 16:47:10

block

2013-07-19 13:16:26

iOS中BlockiOS開發學習內存管理

2015-03-30 11:18:50

內存管理Android

2010-09-25 14:12:50

Java內存分配

2010-09-16 09:13:09

CSS display

2010-09-26 14:55:46

JVM內存監控

2016-03-21 10:31:25

Android內存泄露

2010-09-25 12:54:24

JVM內存

2017-03-07 09:45:43

iOSBlock開發

2025-09-19 09:16:35

2013-07-19 12:52:50

iOS中BlockiOS開發學習

2020-12-23 13:14:00

LinuxLinux內存Swap

2021-10-15 08:51:09

Linux內存 Kmalloc

2013-10-11 17:24:47

Linux運維內存管理

2021-03-30 10:50:18

Linux內存命令

2016-10-09 14:41:40

Swift開發ARC

2021-04-30 20:20:36

HugePages大內存頁系統

2016-03-07 09:09:35

blockios開發實踐

2023-10-12 19:41:55

2010-02-22 08:58:35

JVM內存模型垃圾收集
點贊
收藏

51CTO技術棧公眾號

亚洲国产成人av网| 欧美日本在线看| 国产精品18久久久久久麻辣| 日韩欧美中文视频| 久久久久久久久黄色| 6080亚洲理论片在线观看| 免费国产自线拍一欧美视频| 日韩欧美高清dvd碟片| 日韩欧美三级电影| 欧美三级韩国三级日本三斤在线观看| 不卡一区视频| 国产精品不卡一区| 国产精品青青在线观看爽香蕉 | 精品少妇爆乳无码av无码专区| 91p九色成人| 国产婷婷色一区二区三区 | 日韩黄色a级片| 91精品入口| 欧洲av一区二区嗯嗯嗯啊| 免费一区二区三区| 欧美黑人一区二区| 五月天亚洲色图| 懂色av影视一区二区三区| 国产精品免费在线播放| 日本熟妇毛耸耸xxxxxx| 欧美中文一区二区| 欧美三级电影在线看| 婷婷四房综合激情五月| 中文在线a天堂| 波多野结衣的一区二区三区| 欧美大片免费久久精品三p | 日本在线精品| 日本一区二区免费在线| 国产日韩精品在线观看| 亚洲天堂网av在线| 亚洲一区二区三区在线免费| 在线视频国产一区| 欧美a v在线播放| 国产区视频在线播放| 精品一区二区男人吃奶| 欧美日韩亚洲成人| 女人被男人躁得好爽免费视频| 亚洲av无码一区二区三区dv| 激情欧美一区| 亚洲老司机av| 欧美日韩中文不卡| 日本三级韩国三级欧美三级| 成人动漫一区二区在线| 国产成人综合精品| 色播视频在线播放| 国产一区二区中文| 亚洲男人天堂久| 美女久久久久久久久| 裤袜国产欧美精品一区| 中文字幕一区二区三区四区不卡 | 欧美一级大片在线观看| 公侵犯人妻一区二区三区| 成人黄色在线| 在线观看亚洲一区| 欧美午夜性生活| 天天色天天射天天综合网| 国产精品理论片在线观看| 亚洲tv在线观看| 黄色在线视频网址| 欧美亚洲三区| 国产精品久久一| 91成人国产综合久久精品| 狠狠色狠狠色综合日日tαg | 手机在线理论片| 最好看的中文字幕久久| 久久riav二区三区| 国产视频在线观看视频| 久久精品导航| 久久久久国产精品免费| 无码少妇一区二区| 给我免费播放日韩视频| 欧美三电影在线| 99日在线视频| 韩国精品主播一区二区在线观看| 亚洲日本成人在线观看| 欧美大香线蕉线伊人久久| 亚洲精品国产精品乱码视色| 国产精品av久久久久久麻豆网| 在线国产精品播放| 小毛片在线观看| 精品一区二区三区中文字幕在线| 在线一区二区三区四区| 午夜在线观看av| 樱桃视频成人在线观看| 欧美三级一区二区| 亚洲熟女乱综合一区二区| 欧美91在线|欧美| 色婷婷av一区| 啊啊啊一区二区| 国产精品探花在线| 亚洲免费av高清| 亚洲欧美日韩精品综合在线观看| 天天操天天操天天| 成人亚洲精品久久久久软件| 91中文在线视频| 少妇喷水在线观看| 欧美韩国日本综合| 亚洲理论电影在线观看| 亚洲欧美成人影院| 色婷婷综合久久久久中文 | 国产欧美日韩亚洲一区二区三区| 欧美乱大交xxxxx| 黄色录像一级片| 亚洲欧洲综合| 97人人爽人人喊人人模波多| 九九九免费视频| 欧美日本不卡| 日本高清视频一区| 手机在线看片1024| 国产高清不卡一区| 97免费高清电视剧观看| 99热这里是精品| 国产成人综合自拍| 欧美高清视频一区二区三区在线观看| 国产黄网站在线观看| 亚洲男同性视频| 激情视频综合网| 99久久精品一区二区成人| 精品日本一线二线三线不卡| 成年人看片网站| 高清欧美性猛交xxxx黑人猛| 中文字幕日韩免费视频| www.99re6| 女人香蕉久久**毛片精品| 日韩在线播放一区| 91九色丨porny丨极品女神| 成人一二三区| 欧美专区在线观看| 蜜桃视频久久一区免费观看入口| av成人免费在线观看| 欧美xxxx黑人又粗又长精品| 手机av在线播放| 在线播放日韩导航| 亚洲黄色小说在线观看| 国产精品福利在线观看播放| 欧美成人在线网站| 制服.丝袜.亚洲.中文.综合懂色| 久久久青草婷婷精品综合日韩| 日本国产一区二区三区| 欧洲av在线播放| 亚洲综合精品自拍| 久久久久人妻精品一区三寸| 成人午夜亚洲| 亚洲人成欧美中文字幕| 精品无码一区二区三区蜜臀 | 国产91久久婷婷一区二区| 老熟妇一区二区三区| 卡一卡二国产精品 | 亚洲av无码国产精品永久一区| 中文字幕一区二区三区在线观看 | 成人在线不卡| 色香阁99久久精品久久久| 免费麻豆国产一区二区三区四区| 久久99国产精品久久99| 国内外成人免费视频| 91高清在线| 图片区日韩欧美亚洲| 亚洲性图一区二区| 日韩精品不卡一区二区| 91精品国产91久久久久久吃药 | 欧美一区二区三区四区久久| 玖玖爱在线精品视频| 欧美午夜精彩| 国产伦精品免费视频| 蜜桃av中文字幕| 精品女厕一区二区三区| 中文字幕在线观看的网站| 国产精品久久占久久| 91久久久久久久久久久| 欧美女优在线| 亚洲国产sm捆绑调教视频| 美女搡bbb又爽又猛又黄www| 国产欧美日韩一级| 日韩欧美视频一区二区| 国产精品亚洲一区二区在线观看| 亚洲美女自拍视频| 亚洲 小说区 图片区| 中文字幕日韩欧美一区二区三区| 香蕉视频在线观看黄| 亚洲美女毛片| 成人精品视频在线| 久久这里精品| 91麻豆精品国产91久久久久久久久 | 欧美特级aaa| 欧美在线91| 久久伦理网站| 四虎地址8848精品| 一本一本久久a久久精品综合小说 一本一本久久a久久精品牛牛影视 | 中文字幕巨乱亚洲| 日韩av一二三四区| 成人影院天天5g天天爽无毒影院| 91在线在线观看| 芒果视频成人app| 久久成人人人人精品欧| 中文字字幕在线观看| 亚洲激情成人在线| 国产精品v日韩精品v在线观看| 欧美国产精品| 色噜噜狠狠一区二区三区| 玖玖精品一区| 国产精品久久久久久婷婷天堂| 污污视频在线看| 国产亚洲欧美视频| 国产美女www| 欧美激情一区在线观看| www.美色吧.com| 亚洲精选久久| a级网站在线观看| 国产精品视频一区视频二区 | 91香蕉在线视频| 中文字幕亚洲精品在线观看| 亚洲av无码国产精品久久| 在线亚洲自拍| 三级在线免费观看| 视频二区欧美毛片免费观看| 精品中文字幕乱| 成年人视频网站在线| 在线观看免费亚洲| 亚洲国产精品午夜在线观看| 亚洲视频一区二区在线观看| 中文字幕免费高清| 日本欧美久久久久免费播放网| 亚洲欧洲一区二区在线观看| 亚州综合一区| 国产精品igao视频| 大桥未久在线视频| 亚洲欧美一区二区三区四区| 黄色av中文字幕| 色综合天天综合网天天看片| 国产精品19乱码一区二区三区| wwwwww.欧美系列| av在线观看地址| 亚洲色图欧美| 九九九九精品九九九九| 成人一区福利| 欧美中文在线免费| 亚洲女同志freevdieo| 久久免费少妇高潮久久精品99| 奇米影视888狠狠狠777不卡| 欧美在线观看视频一区二区| 国产成人久久久久| 亚洲三级视频在线观看| 小泽玛利亚一区| 亚洲欧洲综合另类| 久久久久亚洲av片无码| 99久久精品99国产精品| 视色视频在线观看| 六月丁香婷婷色狠狠久久| 手机看片福利日韩| 蜜臀av性久久久久av蜜臀妖精| 欧美日韩在线另类| 国产不卡一二三| 99久久精品久久久久久清纯| 欧美xxxxx精品| 91色在线porny| 性猛交ⅹxxx富婆video| 欧美韩国日本一区| 国精产品一区一区二区三区mba| 中文字幕五月欧美| 国产亚洲精品久久久久久无几年桃| 樱花影视一区二区| www.国产成人| 欧洲精品一区二区三区在线观看| 中文字幕无码乱码人妻日韩精品| 欧美日高清视频| 亚洲AV无码一区二区三区性| 亚洲国产精品va在线看黑人动漫| youjizz在线视频| 色国产精品一区在线观看| 在线播放国产一区| 欧美日韩亚洲91| 久久国产香蕉视频| 91.成人天堂一区| 囯产精品久久久久久| 精品电影一区二区三区| 欧美视频xxxx| 日韩一级免费观看| 亚洲一卡二卡在线| 日韩欧美一二三四区| 五月婷婷狠狠干| 欧美成人国产一区二区| 亚洲日本国产精品| 色婷婷久久一区二区| 欧美大胆的人体xxxx| 另类色图亚洲色图| 美女av在线免费看| 欧美激情亚洲视频| 精品三区视频| 成人在线视频电影| 日韩精品一区二区三区中文| 国产丝袜不卡| 9999国产精品| 亚洲人一区二区| 国产精品午夜一区二区三区| 国产欧美日韩综合一区在线观看 | 茄子视频成人在线观看| 久久国产精品免费精品3p| 五月天色一区| 99在线精品免费视频九九视| 国产美女18xxxx免费视频| 麻豆精品精品国产自在97香蕉| 亚洲免费观看在线| 国产精品免费看片| 精品国产免费观看| 91精品国产欧美日韩| 国产中文在线观看| 中国人与牲禽动交精品| 阿v视频在线| 亚洲影影院av| 成人影视亚洲图片在线| 男女午夜激情视频| 成人午夜激情影院| 在线免费看av网站| 欧美性欧美巨大黑白大战| 天堂网在线播放| 欧美精品手机在线| 99精品国产九九国产精品| 日韩一区不卡| 久久久久中文| 素人fc2av清纯18岁| 亚洲国产欧美另类丝袜| www.国产.com| 日韩国产激情在线| 成人免费视频| 欧美性在线视频| 久9re热视频这里只有精品| 精品无码av无码免费专区| 亚洲精品女人| 国产免费a级片| 一区二区三区久久| 国产视频手机在线| www.xxxx精品| 亚洲18在线| 欧美性视频在线播放| 精品动漫av| 国产欧美视频一区| 亚洲精品v日韩精品| av手机免费看| 九九热在线精品视频| 精品网站999| 色婷婷777777仙踪林| 国产精一区二区三区| www.久久av| 色综合av在线| 免费黄网站在线观看| 国产va免费精品高清在线| 国产一区二区三区电影在线观看| 人妻有码中文字幕| 久久精品亚洲精品国产欧美kt∨ | 日韩av视屏| 日本久久精品视频| 国产一区二区电影在线观看| 日日噜噜夜夜狠狠| 亚洲色图在线看| 亚洲av无码国产精品久久不卡| 久久免费视频在线| 日韩精品免费一区二区三区竹菊| 日韩人妻精品无码一区二区三区| 久久在线观看免费| 中文字幕免费视频观看| 日韩中文字幕国产| 亚洲一区二区免费在线观看| 黄色一级在线视频| 国内不卡的二区三区中文字幕| 免费的av网站| 色吊一区二区三区| 日本不卡三区| 国产精品成人在线| 欧美成人一区在线观看| 一本—道久久a久久精品蜜桃| 韩国午夜理伦三级不卡影院| 精品视频一区二区在线观看| 日韩av一区在线观看| 日本欧美韩国| 久操手机在线视频| 久久免费美女视频| 97国产成人无码精品久久久| 欧美精品videossex性护士| 国产精品中文字幕亚洲欧美| 亚洲色图偷拍视频| 五月开心婷婷久久| 男女啪啪在线观看| 国内视频一区二区| 精品亚洲成a人在线观看| 日本熟妇一区二区| 日韩一区二区福利| 精品淫伦v久久水蜜桃| 国产免费又粗又猛又爽| 亚洲午夜在线电影| 亚洲高清视频在线播放| 国产成人avxxxxx在线看| 欧美精品成人| 成人在线观看免费高清| 91黄色免费看| 男男gaygays亚洲|