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

亚洲 欧美综合在线网络| 久国产精品韩国三级视频| 日韩精品极品在线观看播放免费视频| 国产精品欧美激情在线观看| 97视频精彩视频在线观看| 国产在线国偷精品产拍免费yy| 久久久久久国产精品三级玉女聊斋 | 国产精品揄拍500视频| 欧美做爰爽爽爽爽爽爽| 台湾亚洲精品一区二区tv| 欧美性猛片aaaaaaa做受| 日韩专区第三页| yourporn在线观看视频| 成人毛片老司机大片| 国产精品免费观看在线| 日韩成人一区二区三区| 2023国产精品久久久精品双| 日韩精品视频三区| 99热这里只有精品2| 在线日本欧美| 色综合天天综合网天天看片| 国产精品免费看久久久无码| 在线观看美女网站大全免费| 97久久精品人人做人人爽 | 中文字幕欧美色图| 亚洲日韩视频| 欧美激情18p| 美女三级黄色片| 国产成人精品一区二区免费看京| 欧美r级在线观看| 亚洲免费黄色录像| 中文在线аv在线| 亚洲成年人影院| 视频一区二区视频| 日本视频在线| 国产精品每日更新在线播放网址 | 五月天婷婷在线播放| 国产中文字幕精品| 成人黄色片网站| 久久精品99北条麻妃| 午夜亚洲精品| 91大神福利视频在线| 欧美日韩国产精品综合| 永久亚洲成a人片777777| 中文字幕亚洲欧美一区二区三区 | 一本色道久久综合狠狠躁的推荐| 韩日视频在线观看| 欧美女同一区| 亚洲综合成人网| 国产成人生活片| 直接在线观看的三级网址| 中文字幕中文字幕一区二区| 一区二区三区四区国产| 日本最新在线视频| 亚洲欧洲韩国日本视频| 亚洲乱码一区二区三区三上悠亚| 成人在线观看一区| 国产蜜臀av在线一区二区三区| 欧美最大成人综合网| 国产在线观看精品一区| 国产亚洲综合在线| 亚洲国产精品久久久久婷婷老年 | 欧美人与拘性视交免费看| 亚洲精品中文字幕女同| 亚洲精品色午夜无码专区日韩| 国产乱论精品| 日韩高清免费在线| 亚洲图片另类小说| 日韩成人精品一区| 久久天天躁日日躁| 国产无码精品一区二区| 一本色道久久精品| 国产精品91免费在线| 怡红院男人天堂| 激情综合网av| 国产欧美一区二区三区另类精品| 日本国产在线观看| 久久精品人人做人人综合| 日产中文字幕在线精品一区| 日韩www在线| 刘亦菲国产毛片bd| 欧美精品国产一区| 97成人精品区在线播放| 国产精品51麻豆cm传媒| 国产成人精品亚洲777人妖 | 国产精品久久在线观看| 国产三级在线观看视频| 99热精品国产| 亚洲国产精品www| a'aaa级片在线观看| 色偷偷久久人人79超碰人人澡| 在线观看亚洲色图| 国产成人夜色高潮福利影视| 一级做a爰片久久毛片美女图片| 91狠狠综合久久久| 夜久久久久久| 亚洲一区二区三区777| 四季av日韩精品一区| 国产精品久久久久一区二区三区| 日韩精品综合在线| 成人一区视频| 日韩精品免费综合视频在线播放| 18啪啪污污免费网站| 国产欧美日韩一级| 亚洲最大成人网色| 国产黄在线观看免费观看不卡| 亚洲中国最大av网站| 校园春色 亚洲色图| 福利在线一区| 久久综合久久美利坚合众国| 色一情一乱一伦| 国产精品综合一区二区| 色综合视频二区偷拍在线| 9lporm自拍视频区在线| 91精品欧美综合在线观看最新 | 欧美一级免费视频| 国产成人av免费看| 视频在线不卡免费观看| 欧美激情第6页| 中文字幕av网站| 91香蕉视频污| 嫩草影院中文字幕| 亚洲欧美在线人成swag| 亚洲日本成人网| 日本一级一片免费视频| 成人午夜在线播放| 欧美 国产 精品| 久久精品 人人爱| 亚洲精品中文字| 亚洲午夜18毛片在线看| 成人高清免费观看| 国内少妇毛片视频| 视频欧美一区| 欧美精品在线第一页| 国产精品自产拍| 《视频一区视频二区| 韩国视频一区二区三区| 国产亚洲一区| 国产91亚洲精品| 欧美色图另类| 色婷婷av一区二区三区大白胸| 挪威xxxx性hd极品| 亚洲第一毛片| 国产亚洲二区| 绿色成人影院| 日韩电影大全免费观看2023年上| 日本污视频在线观看| 成人午夜伦理影院| 成人午夜免费在线| 欧美特大特白屁股xxxx| 国产视频精品自拍| 免费无码国产精品| 国产视频在线观看一区二区三区| 日本999视频| 成人a'v在线播放| 国产噜噜噜噜噜久久久久久久久 | 国产午夜精品一区二区三区四区| 中文字幕乱码人妻综合二区三区| 亚洲成人一品| 国产精品v片在线观看不卡| 91精品大全| 7777精品伊人久久久大香线蕉 | 黄色亚洲免费| 韩国成人av| 456亚洲精品成人影院| 中文国产亚洲喷潮| 国产老妇伦国产熟女老妇视频| 一区二区三区在线免费观看| 逼特逼视频在线观看| 亚洲一区久久| 在线观看免费91| 日本综合精品一区| 欧美专区国产专区| 欧美欧美全黄| 99久久精品情趣| 日本免费黄色小视频| 大桥未久女教师av一区二区| 538国产精品一区二区免费视频| 青草久久伊人| 欧美日本不卡视频| 国产亚洲精品久久777777| 99精品视频一区二区| 国产精品人人妻人人爽人人牛| 亚洲a一区二区三区| 国产一区二区在线观看免费播放| 成人黄色免费短视频| 久久成年人免费电影| 深夜福利在线视频| 欧美精品777| 你懂的国产视频| 中文字幕一区免费在线观看| 中文字幕一区二区三区乱码不卡| 视频一区欧美精品| 成年人深夜视频| 日韩一区自拍| 精品乱码一区二区三区| 亚洲精品一区二区在线播放∴| 久久久久久久久亚洲| 国产黄在线观看| 亚洲精品一区二区三区在线观看 | 小嫩嫩精品导航| 亚洲欧美日韩不卡| 亚洲人成精品久久久| 91嫩草免费看| 成人在线视频免费| 51午夜精品视频| 欧美亚洲天堂| www.午夜精品| 国产1区2区3区在线| 亚洲国产精品成人精品| 国产丝袜视频在线观看| 在线亚洲高清视频| 国产成人无码精品久在线观看 | 国产亚洲欧美日韩美女| 亚洲美女福利视频| 777a∨成人精品桃花网| 中文字幕天堂在线| 婷婷激情综合网| 久久精品第一页| 亚洲欧洲制服丝袜| 殴美一级黄色片| 日本一区二区免费在线| 久久人人爽人人爽人人片| 成人综合婷婷国产精品久久| 超碰人人草人人| 久久99国产精品久久99 | 影视一区二区三区| 欧美中文在线字幕| 成人影院在线视频| 久久久久久久久亚洲| 美女日批视频在线观看| 美女黄色丝袜一区| 成人午夜在线影视| 久久天天躁夜夜躁狠狠躁2022| 日韩在线免费电影| 深夜福利一区二区| 日本在线观看视频| 中文字幕久久久av一区| 成人高清免费在线播放| 亚洲欧洲在线播放| 色播色播色播色播色播在线| 日韩av在线不卡| 色综合888| 亚洲区一区二区| 国产在线观看网站| 自拍偷拍亚洲在线| 日本韩国在线视频爽| 久久久91精品| 影院在线观看全集免费观看| 欧美大片免费观看在线观看网站推荐 | 成人av网站在线观看| jjzzjjzz欧美69巨大| 99久久伊人网影院| 白丝女仆被免费网站| 国产欧美精品在线观看| 国产精品视频在| 亚洲精品五月天| 妺妺窝人体色www在线下载| 亚洲综合丝袜美腿| 欧美精品二区三区| 欧美色综合影院| 99精品人妻无码专区在线视频区| 欧美一级日韩免费不卡| 亚洲国产视频一区二区三区| 亚洲韩国青草视频| 国产福利在线| 欧美成人免费一级人片100| av伦理在线| 国产精品成人观看视频国产奇米| 欧美男女视频| 成人av免费看| 免费成人av| 国产成人精品免费看在线播放| 亚洲香蕉网站| 玩弄japan白嫩少妇hd| 捆绑调教美女网站视频一区| 蜜桃视频无码区在线观看| 97成人超碰视| 91ts人妖另类精品系列| 亚洲影院理伦片| 中文字幕+乱码+中文乱码www| 91精品国产综合久久久久久| 色哟哟国产精品色哟哟| 在线中文字幕日韩| free性欧美| 国产精品视频一| 老汉色老汉首页av亚洲| 伊人久久大香线蕉综合75| 伊人成人在线| 国产91色在线观看| www.成人网.com| 男人晚上看的视频| 日韩欧美中文免费| 精品人妻一区二区三区四区不卡| 亚洲美女激情视频| 一色桃子av在线| 国产精品高潮呻吟久久av黑人| 欧美日韩中出| 亚洲一二区在线| 国产精品嫩草99av在线| 亚洲一级片av| 久久精品网站免费观看| 久久久久人妻一区精品色欧美| 色系网站成人免费| 成人午夜免费福利| www国产91| 88xx成人永久免费观看| 国产高清一区视频| 亚洲精品97| 久久久久久久片| 99re这里只有精品视频首页| 美女三级黄色片| 欧美日韩一卡二卡三卡| 日韩成人黄色| 国语自产偷拍精品视频偷 | 日韩精品免费专区| av免费观看不卡| 一个色妞综合视频在线观看| 亚洲一区 中文字幕| 国产视频久久久久| 黄视频网站在线观看| 91嫩草免费看| 午夜欧美精品| 欧美日韩久久婷婷| 国产精品九色蝌蚪自拍| 波多野结衣黄色| 亚洲欧美中文日韩在线| 高清毛片在线观看| 国产91aaa| 欧美日韩一区二区国产| 天天色天天干天天色| 亚洲欧洲韩国日本视频| 亚洲最新av网站| 久久精品电影网| 色综合一区二区日本韩国亚洲| 色姑娘综合网| 日本一区中文字幕| 中文字幕第二区| 欧美无砖专区一中文字| 在线视频二区| 国产日韩精品电影| 欧美3p视频| 欧美大片久久久| 亚洲蜜臀av乱码久久精品| 国产三级自拍视频| 欧美成人精品h版在线观看| 国产精品亚洲综合在线观看| 精品一区二区成人免费视频| 国产一区视频导航| 激情小说中文字幕| 337p日本欧洲亚洲大胆色噜噜| 成人在线免费观看黄色| 国产视频在线观看一区| 一区二区毛片| 毛片网站免费观看| 精品视频1区2区| 成人午夜在线影视| 国产精品国模大尺度私拍| 1024精品一区二区三区| 中文字幕5566| 欧美三日本三级三级在线播放| 性开放的欧美大片| 99re国产视频| 国产乱码精品| 国产99在线 | 亚洲| 欧美一区二区视频在线观看| 韩国日本一区| 日韩欧美三级电影| 国产一区二区视频在线播放| 国产中文字字幕乱码无限| 日韩高清免费在线| 黄色日韩网站| 男女激情免费视频| 久久久久久久久久看片| 亚洲特级黄色片| 久久久久女教师免费一区| 久久99蜜桃| 国产精品嫩草影视| 黑人狂躁日本妞一区二区三区| jizz在线免费观看| 91精品国产一区二区三区动漫| 怡红院精品视频在线观看极品| 国产精品密蕾丝袜| 日韩一级片在线播放| 亚洲精品永久免费视频| 色中文字幕在线观看| 99视频精品全部免费在线| 日批视频免费观看| 高清欧美性猛交| 久久在线电影| 狠狠人妻久久久久久综合蜜桃| 欧美妇女性影城| 亚洲精品动漫| 香港三级日本三级a视频| 国产色综合一区| 手机看片国产1024| 91免费欧美精品| 日韩制服丝袜先锋影音| 免费无码毛片一区二区app| 亚洲一级一级97网|