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

weak的生命周期

移動(dòng)開(kāi)發(fā) iOS
我們都知道weak表示的是一個(gè)弱引用,這個(gè)引用不會(huì)增加對(duì)象的引用計(jì)數(shù),并且在所指向的對(duì)象被釋放之后,weak指針會(huì)被設(shè)置的為nil。weak引用通常是用于處理循環(huán)引用的問(wèn)題,如代理及block的使用中,相對(duì)會(huì)較多的使用到weak。

weak的生命周期

我們都知道weak表示的是一個(gè)弱引用,這個(gè)引用不會(huì)增加對(duì)象的引用計(jì)數(shù),并且在所指向的對(duì)象被釋放之后,weak指針會(huì)被設(shè)置的為nil。weak引用通常是用于處理循環(huán)引用的問(wèn)題,如代理及block的使用中,相對(duì)會(huì)較多的使用到weak。

之前對(duì)weak的實(shí)現(xiàn)略有了解,知道它的一個(gè)基本的生命周期,但具體是怎么實(shí)現(xiàn)的,了解得不是太清晰。今天又翻了翻《Objective-C高級(jí)編程》關(guān)于__weak的講解,在此做個(gè)筆記。

我們以下面這行代碼為例:

代碼清單1:示例代碼

  1. id __weak obj1 = obj; 

當(dāng)我們初始化一個(gè)weak變量時(shí),runtime會(huì)調(diào)用objc_initWeak函數(shù)。這個(gè)函數(shù)在Clang中的聲明如下:

  1. id objc_initWeak(id *object, id value); 

其具體實(shí)現(xiàn)如下:

  1. id objc_initWeak(id *object, id value) 
  2. *object = 0
  3. return objc_storeWeak(object, value); 

示例代碼輪換成編譯器的模擬代碼如下:

  1. id obj1; 
  2. objc_initWeak(&obj1, obj); 

因此,這里所做的事是先將obj1初始化為0(nil),然后將obj1的地址及obj作為參數(shù)傳遞給objc_storeWeak函數(shù)。

objc_initWeak函數(shù)有一個(gè)前提條件:就是object必須是一個(gè)沒(méi)有被注冊(cè)為_(kāi)_weak對(duì)象的有效指針。而value則可以是null,或者指向一個(gè)有效的對(duì)象。

如果value是一個(gè)空指針或者其指向的對(duì)象已經(jīng)被釋放了,則object是zero-initialized的。否則,object將被注冊(cè)為一個(gè)指向value的__weak對(duì)象。而這事應(yīng)該是objc_storeWeak函數(shù)干的。objc_storeWeak的函數(shù)聲明如下:

  1. id objc_storeWeak(id *location, id value); 

其具體實(shí)現(xiàn)如下:

  1. id objc_storeWeak(id *location, id newObj) 
  2. id oldObj; 
  3. SideTable *oldTable; 
  4. SideTable *newTable; 
  5.  
  6. ...... 
  7.  
  8. // Acquire locks for old and new values. 
  9. // Order by lock address to prevent lock ordering problems. 
  10. // Retry if the old value changes underneath us. 
  11. retry: 
  12. oldObj = *location; 
  13.  
  14. oldTable = SideTable::tableForPointer(oldObj); 
  15. newTable = SideTable::tableForPointer(newObj); 
  16.  
  17. ...... 
  18.  
  19. if (*location != oldObj) { 
  20. OSSpinLockUnlock(lock1); 
  21. #if SIDE_TABLE_STRIPE > 1 
  22. if (lock1 != lock2) OSSpinLockUnlock(lock2); 
  23. #endif 
  24. goto retry; 
  25.  
  26. if (oldObj) { 
  27. weak_unregister_no_lock(&oldTable->weak_table, oldObj, location); 
  28. if (newObj) { 
  29. newObj = weak_register_no_lock(&newTable->weak_table, newObj,location); 
  30. // weak_register_no_lock returns NULL if weak store should be rejected 
  31. // Do not set *location anywhere else. That would introduce a race. 
  32. *location = newObj; 
  33.  
  34. ...... 
  35.  
  36. return newObj; 

我們撇開(kāi)源碼中各種鎖操作,來(lái)看看這段代碼都做了些什么。在此之前,我們先來(lái)了解下weak表和SideTable。

weak表是一個(gè)弱引用表,實(shí)現(xiàn)為一個(gè)weak_table_t結(jié)構(gòu)體,存儲(chǔ)了某個(gè)對(duì)象相關(guān)的的所有的弱引用信息。其定義如下(具體定義在objc-weak.h中):

  1. struct weak_table_t { 
  2. weak_entry_t *weak_entries; 
  3. size_t num_entries; 
  4. ...... 
  5. }; 

其中weak_entry_t是存儲(chǔ)在弱引用表中的一個(gè)內(nèi)部結(jié)構(gòu)體,它負(fù)責(zé)維護(hù)和存儲(chǔ)指向一個(gè)對(duì)象的所有弱引用hash表。其定義如下:

  1. struct weak_entry_t { 
  2. DisguisedPtr<objc_object> referent; 
  3. union { 
  4. struct { 
  5. weak_referrer_t *referrers; 
  6. uintptr_t out_of_line : 1
  7. ...... 
  8. }; 
  9. struct { 
  10. // out_of_line=0 is LSB of one of these (don't care which) 
  11. weak_referrer_t inline_referrers[WEAK_INLINE_COUNT]; 
  12. }; 
  13. }; 
  14. }; 

其中referent是被引用的對(duì)象,即示例代碼中的obj對(duì)象。下面的union即存儲(chǔ)了所有指向該對(duì)象的弱引用。由注釋可以看到,當(dāng)out_of_line等于0時(shí),hash表被一個(gè)數(shù)組所代替。另外,所有的弱引用對(duì)象的地址都是存儲(chǔ)在weak_referrer_t指針的地址中。其定義如下:

typedef objc_object ** weak_referrer_t;

SideTable是一個(gè)用C++實(shí)現(xiàn)的類,它的具體定義在NSObject.mm中,我們來(lái)看看它的一些成員變量的定義:

  1. class SideTable { 
  2. private
  3. static uint8_t table_buf[SIDE_TABLE_STRIPE * SIDE_TABLE_SIZE]; 
  4.  
  5. public
  6.  
  7. RefcountMap refcnts; 
  8. weak_table_t weak_table; 
  9.  
  10. ...... 
  11.  

RefcountMap refcnts,大家應(yīng)該能猜到這個(gè)做什么用的吧?看著像是引用計(jì)數(shù)什么的。哈哈,貌似就是啊,這東東存儲(chǔ)了一個(gè)對(duì)象的引用計(jì)數(shù)的信息。當(dāng)然,我們?cè)谶@里不去探究它,我們關(guān)注的是weak_table。這個(gè)成員變量指向的就是一個(gè)對(duì)象的weak表。

了解了weak表和SideTable,讓我們?cè)倩剡^(guò)頭來(lái)看看objc_storeWeak。首先是根據(jù)weak指針找到其指向的老的對(duì)象:

  1. oldObj = *location; 

然后獲取到與新舊對(duì)象相關(guān)的SideTable對(duì)象:

  1. oldTable = SideTable::tableForPointer(oldObj); 
  2. newTable = SideTable::tableForPointer(newObj); 
  3.  
  4. 下面要做的就是在老對(duì)象的weak表中移除指向信息,而在新對(duì)象的weak表中建立關(guān)聯(lián)信息: 
  5.  
  6. if (oldObj) { 
  7. weak_unregister_no_lock(&oldTable->weak_table, oldObj, location); 
  8. if (newObj) { 
  9. newObj = weak_register_no_lock(&newTable->weak_table, newObj,location); 
  10. // weak_register_no_lock returns NULL if weak store should be rejected 

接下來(lái)讓弱引用指針指向新的對(duì)象:

  1. *location = newObj; 

***會(huì)返回這個(gè)新對(duì)象:

  1. return newObj; 

objc_storeWeak的基本實(shí)現(xiàn)就是這樣。當(dāng)然,在objc_initWeak中調(diào)用objc_storeWeak時(shí),老對(duì)象是空的,所有不會(huì)執(zhí)行weak_unregister_no_lock操作。

而當(dāng)weak引用指向的對(duì)象被釋放時(shí),又是如何去處理weak指針的呢?當(dāng)釋放對(duì)象時(shí),其基本流程如下:

調(diào)用objc_release

因?yàn)閷?duì)象的引用計(jì)數(shù)為0,所以執(zhí)行dealloc

在dealloc中,調(diào)用了_objc_rootDealloc函數(shù)

在_objc_rootDealloc中,調(diào)用了object_dispose函數(shù)

調(diào)用objc_destructInstance

***調(diào)用objc_clear_deallocating

我們重點(diǎn)關(guān)注一下***一步,objc_clear_deallocating的具體實(shí)現(xiàn)如下:

  1. void objc_clear_deallocating(id obj) 
  2. ...... 
  3.  
  4. SideTable *table = SideTable::tableForPointer(obj); 
  5.  
  6. // clear any weak table items 
  7. // clear extra retain count and deallocating bit 
  8. // (fixme warn or abort if extra retain count == 0 ?) 
  9. OSSpinLockLock(&table->slock); 
  10. if (seen_weak_refs) { 
  11. arr_clear_deallocating(&table->weak_table, obj); 
  12. ...... 

我們可以看到,在這個(gè)函數(shù)中,首先取出對(duì)象對(duì)應(yīng)的SideTable實(shí)例,如果這個(gè)對(duì)象有關(guān)聯(lián)的弱引用,則調(diào)用arr_clear_deallocating來(lái)清除對(duì)象的弱引用信息。我們來(lái)看看arr_clear_deallocating具體實(shí)現(xiàn):

  1. PRIVATE_EXTERN void arr_clear_deallocating(weak_table_t *weak_table, id referent) { 
  2. weak_entry_t *entry = weak_entry_for_referent(weak_table, referent); 
  3. if (entry == NULL) { 
  4. ...... 
  5. return
  6. // zero out references 
  7. for (int i = 0; i < entry->referrers.num_allocated; ++i) { 
  8. id *referrer = entry->referrers.refs[i].referrer; 
  9. if (referrer) { 
  10. if (*referrer == referent) { 
  11. *referrer = nil; 
  12. else if (*referrer) { 
  13. _objc_inform("__weak variable @ %p holds %p instead of %p\n", referrer, *referrer, referent); 
  14.  
  15. weak_entry_remove_no_lock(weak_table, entry); 
  16. weak_table->num_weak_refs--; 

這個(gè)函數(shù)首先是找出對(duì)象對(duì)應(yīng)的weak_entry_t鏈表,然后挨個(gè)將弱引用置為nil。***清理對(duì)象的記錄。

通過(guò)上面的描述,我們基本能了解一個(gè)weak引用從生到死的過(guò)程。從這個(gè)流程可以看出,一個(gè)weak引用的處理涉及各種查表、添加與刪除操作,還是有一定消耗的。所以如果大量使用__weak變量的話,會(huì)對(duì)性能造成一定的影響。那么,我們應(yīng)該在什么時(shí)候去使用weak呢?《Objective-C高級(jí)編程》給我們的建議是只在避免循環(huán)引用的時(shí)候使用__weak修飾符。

另外,在clang中,還提供了不少關(guān)于weak引用的處理函數(shù)。如objc_loadWeak, objc_destroyWeak, objc_moveWeak等,我們可以在蘋(píng)果的開(kāi)源代碼中找到相關(guān)的實(shí)現(xiàn)。等有時(shí)間,我再好好研究研究。

參考

《Objective-C高級(jí)編程》1.4: __weak修飾符

Clang 3.7 documentation – Objective-C Automatic Reference Counting (ARC)

apple opensource – NSObject.mm

零碎

CAGradientLayer

CAGradientLayer類是用于在其背景色上繪制一個(gè)顏色漸變,以填充層的整個(gè)形狀,包括圓角。這個(gè)類繼承自CALayer類,使用起來(lái)還是很方便的。

與Quartz 2D中的漸變處理類似,一個(gè)漸變有一個(gè)起始位置(startPoint)和一個(gè)結(jié)束位置(endPoint),在這兩個(gè)位置之間,我們可以指定一組顏色值(colors,元素是CGColorRef對(duì)象),可以是兩個(gè),也可以是多個(gè),每個(gè)顏色值會(huì)對(duì)應(yīng)一個(gè)位置(locations)。另外,漸變還分為軸向漸變和徑向漸變。

我們寫(xiě)個(gè)實(shí)例來(lái)看看CAGradientLayer的具體使用:

  1. CAGradientLayer *layer = [CAGradientLayer layer]; 
  2. layer.startPoint = (CGPoint){0.5f, 0.0f}; 
  3. layer.endPoint = (CGPoint){0.5f, 1.0f}; 
  4. layer.colors = [NSArray arrayWithObjects:(id)[UIColor blueColor].CGColor, (id)[UIColor redColor].CGColor, (id)[UIColor greenColor].CGColor, nil]; 
  5. layer.locations = @[@0.0f, @0.6f, @1.0f]; 
  6. layer.frame = self.view.layer.bounds; 
  7.  
  8. [self.view.layer insertSublayer:layer atIndex:0]; 

參考

CAGradientLayer Class Reference

Xcode中Ineligible Devices的處理

換了臺(tái)新電腦,裝了個(gè)Xcode 6.3,整了個(gè)新證書(shū)和profile,然后打開(kāi)Xcode,連上手機(jī)。額,然后發(fā)現(xiàn)設(shè)備居然被標(biāo)識(shí)為Ineligible Devices,沒(méi)認(rèn)出來(lái)。情況類似于下圖:

電腦是受信任的,證書(shū)和profile也都是OK的。試了幾次重啟Xcode和重新連接手機(jī),無(wú)效。設(shè)備就是選不了。***是在Product->Destination里面才選中這個(gè)設(shè)備的。不過(guò)在工具欄還是不能選擇,郁悶,求解。

iOS 7后隱藏UITextField的光標(biāo)

新項(xiàng)目只支持iOS 7后,很多事情變得簡(jiǎn)單多了,就像隱藏UITextField的光標(biāo)一樣,就簡(jiǎn)單的一句話:

textFiled.tintColor = [UIColor clearColor];

通常我們用UIPickerView作為我們的UITextField的inputView時(shí),我們是需要隱藏光標(biāo)的。當(dāng)然,如果想換個(gè)光標(biāo)顏色,也是這么處理。

這么處理的有個(gè)遺留問(wèn)題是:通常我們使用UIPickerView作為UITextField的inputView時(shí), 并不希望去執(zhí)行各種菜單操作(全選、復(fù)制、粘帖),但只是去設(shè)置UITextField的tintColor時(shí),我們?nèi)匀豢梢詧?zhí)行這邊操作,所以需要加額外的處理。這個(gè)問(wèn)題,我們可以這樣處理:在textFieldShouldBeginEditing:中,我們把UITextField的userInteractionEnabled設(shè)置為NO,然后在textFieldShouldEndEditing:,將將這個(gè)值設(shè)置回來(lái)。如下:

  1. - (BOOL)textFieldShouldBeginEditing:(UITextField *)textField { 
  2.  
  3. textField.userInteractionEnabled = NO; 
  4.  
  5. return YES; 
  6.  
  7. - (BOOL)textFieldShouldEndEditing:(UITextField *)textField { 
  8.  
  9. textField.userInteractionEnabled = YES; 
  10.  
  11. return YES; 

這樣就OK了。當(dāng)然這只是我們當(dāng)前使用的一種處理方式,還有其它的方法,直接google或者stackoverflow吧。

iOS 7后UIAlertView中文字左對(duì)齊問(wèn)題

在iOS 7之前,如果我們想要讓UIAlertView中的文字居左顯示的話,可以使用以下這段代碼來(lái)處理:

  1. for (UIView *view in alert.subviews) { 
  2. if([[view class] isSubclassOfClass:[UILabel class]]) { 
  3. ((UILabel*)view).textAlignment = NSTextAlignmentLeft; 

但很遺憾的是,在iOS 7之后,蘋(píng)果不讓我們這么干了。我們?nèi)トIAlertView的subviews時(shí),獲得的只是一個(gè)空數(shù)組,我們沒(méi)有辦法獲取到我們想要的label。怎么辦?三條路:告訴產(chǎn)品經(jīng)理和UED說(shuō)這個(gè)實(shí)現(xiàn)不了(當(dāng)然,這個(gè)是會(huì)被鄙視的,人家會(huì)說(shuō)你能力差);自己寫(xiě);找第三方開(kāi)源代碼。嘿嘿,不過(guò)由于最近時(shí)間緊,所以我決定跟他們說(shuō)實(shí)現(xiàn)不了,哈哈。不過(guò)在github上找了一個(gè)開(kāi)源的,Custom iOS AlertView,star的數(shù)量也不少,看來(lái)不錯(cuò),回頭好好研究研究。

責(zé)任編輯:chenqingxiang 來(lái)源: 南峰子的技術(shù)博客
相關(guān)推薦

2022-04-19 07:20:24

軟件開(kāi)發(fā)安全生命周期SSDLC應(yīng)用安全

2009-06-11 11:28:35

JSF生命周期

2010-07-14 10:48:37

Perl線程

2009-06-18 13:32:39

Java線程生命周期

2011-06-16 09:31:21

ActivityAndroid

2012-04-28 13:23:12

Java生命周期

2012-01-16 09:00:56

線程

2019-10-16 10:50:13

Linux內(nèi)核測(cè)試

2013-07-29 05:11:38

iOS開(kāi)發(fā)iOS開(kāi)發(fā)學(xué)習(xí)類的'生命周期'

2009-06-17 15:06:50

Hibernate實(shí)體

2009-06-24 10:47:55

JSF生命周期

2021-07-19 05:52:29

網(wǎng)絡(luò)生命周期網(wǎng)絡(luò)框架

2013-08-19 17:03:00

.Net生命周期對(duì)象

2012-06-20 10:29:16

敏捷開(kāi)發(fā)

2013-06-18 10:48:41

OpenSUSEOpenSUSE 12

2024-01-08 22:08:48

Rust生命周期編程

2021-02-14 00:39:57

機(jī)器學(xué)習(xí)技術(shù)人工智能

2010-07-14 10:59:15

Perl線程

2015-07-09 15:42:48

ios應(yīng)用生命周期

2009-07-23 10:23:44

點(diǎn)贊
收藏

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

日韩欧美三级一区二区| 国产精品第2页| av无码一区二区三区| 向日葵视频成人app网址| 一色桃子久久精品亚洲| 国内精品久久国产| 亚洲天堂2021av| 极品裸体白嫩激情啪啪国产精品| 亚洲欧洲偷拍精品| 1314成人网| 在线国产成人影院| 亚洲高清不卡在线观看| 色女人综合av| 特黄视频在线观看| 精品一区二区久久久| 午夜精品福利在线观看| 蜜桃av.com| 亚洲人挤奶视频| 日韩欧美在线1卡| 91色国产在线| 亚洲精品88| 夜夜嗨av一区二区三区网页| 神马影院午夜我不卡| 少妇人妻一区二区| 国产精品自拍三区| 国产在线精品自拍| 国产熟妇一区二区三区四区| 欧美激情视频一区二区三区免费| 国产亚洲精品久久久优势 | 国产91对白在线观看九色| 国产精品福利久久久| 在线观看亚洲网站| 欧美日韩激情| 亚洲美女久久久| 精品国产av色一区二区深夜久久| 日韩激情精品| 欧美一区二区在线看| 黄色永久免费网站| 精品无人乱码一区二区三区| 欧美日韩国产一区在线| 真人抽搐一进一出视频| 色图在线观看| 亚洲美女少妇撒尿| 最近免费观看高清韩国日本大全| 91精彩在线视频| 国产亚洲一区字幕| 日本一区二区三区四区在线观看 | 欧美一区二区激情| 视频在线观看入口黄最新永久免费国产 | 国产高清视频免费最新在线| 91美女片黄在线观看| 精品在线观看一区二区| 四虎精品一区二区三区| 成人av网站大全| 国产伦精品一区二区三| 手机在线观看免费av| 91在线视频网址| 欧美极品一区| av在线三区| 中文字幕日韩精品一区| 国产欧美综合一区| 七七成人影院| 婷婷成人综合网| 久久精品.com| 日本h片久久| 欧美日韩成人综合在线一区二区| 日韩精品视频一二三| 不卡精品视频| 精品粉嫩超白一线天av| 六十路息与子猛烈交尾| 九一精品国产| 久久精品国产91精品亚洲 | av网页在线| 亚洲欧美激情在线| 美脚丝袜脚交一区二区| 玖玖在线播放| 欧美日韩三级一区二区| √天堂资源在线| 国产精品玖玖玖在线资源| 亚洲精品一区二区网址| 99久久99久久精品免费看小说.| 国产韩日影视精品| 久久久亚洲国产天美传媒修理工| 亚洲s码欧洲m码国产av| 久久精品国产免费看久久精品| 亚洲精品女av网站| 亚洲欧美丝袜中文综合| 国产精品视频免费看| 伊人久久在线观看| 精品91久久| 911精品国产一区二区在线| 国内精品免费视频| 国产尤物久久久| 欧美成人午夜激情在线| 久草视频在线观| 久草在线在线精品观看| 精品久久久三级| 色视频在线免费观看| 婷婷国产v国产偷v亚洲高清| 九九热99视频| 啪啪激情综合网| 久久精品91久久香蕉加勒比 | 欧美三级日韩三级| 少妇搡bbbb搡bbb搡打电话| 精品久久国产| 性色av一区二区三区免费| 一级aaaa毛片| 久久综合久久综合久久综合| 国产av第一区| 91亚洲视频| 日韩经典中文字幕| 亚洲国产精品久| 日韩精品成人一区二区三区| 在线视频免费观看一区| 精品亚洲欧美一区| 精品综合久久久| 99在线播放| 欧美午夜免费电影| 少妇按摩一区二区三区| 欧美天堂亚洲电影院在线观看 | 国产综合色视频| 欧美一区国产一区| 欧美三级网站| 亚洲国内精品在线| 久久久综合久久| 国产最新精品免费| 一区二区精品免费视频| 欧美片第一页| 日韩成人在线视频观看| 国产极品在线播放| 国产不卡精品| 亚洲国产日韩精品| 日韩欧美中文在线视频| 国内精品国产成人国产三级粉色| 国产视频一区二区在线观看| 国产美女主播在线| 午夜宅男在线视频| 久久69成人| 在线观看国产精品淫| 中文字幕精品无码一区二区| 成人精品视频.| 国产情侣第一页| 亚洲天堂中文字幕在线观看| 一本一本大道香蕉久在线精品 | 精品99在线观看| 国产毛片一区二区| 欧美在线观看黄| 中文一区二区三区四区| 欧美激情第99页| 你懂的网站在线| 欧美日韩性生活视频| 四虎永久免费影院| 久久午夜电影| 神马一区二区影院| 亚洲欧美专区| 成年无码av片在线| 免费av网站在线播放| 午夜成人在线视频| 这里只有精品电影| 人妻体体内射精一区二区| 欧美a级片网站| 国产精品福利视频| 日韩欧美一中文字暮专区| 日韩久久午夜影院| 99porn视频在线| 亚洲精品一区二区三区新线路| 一区二区三区四区视频精品免费| 野战少妇38p| 亚洲欧美日韩精品一区二区| 视频一区二区综合| www欧美在线观看| 久久久久久尹人网香蕉| 免费黄色在线视频网站| 欧美日韩一区国产| 青青草在线观看视频| av资源网一区| 色婷婷狠狠18| 亚洲一级特黄| 天天综合狠狠精品| japanese色系久久精品| 国产91色在线免费| 成人黄色在线电影| 亚洲免费人成在线视频观看| 一区二区三区免费在线| 五月婷婷激情综合| 内射中出日韩无国产剧情| 免费欧美在线视频| 日本阿v视频在线观看| 久久93精品国产91久久综合| 91在线高清免费观看| 一个人看的www视频在线免费观看| 在线精品播放av| 动漫av一区二区三区| 欧美视频中文一区二区三区在线观看| 亚洲熟女www一区二区三区| 久久嫩草精品久久久精品| 久久出品必属精品| 日韩中文字幕一区二区三区| 97超碰在线视| 精品欧美久久| 精品视频一区二区三区四区| 97久久中文字幕| 日韩av电影免费观看高清| 伦理在线一区| 久久精品一本久久99精品| 日韩大片b站免费观看直播| 欧美一级高清大全免费观看| www.亚洲激情| 欧美日韩国产区| 久久久久久久久久久97| 国产精品你懂的在线欣赏| av直播在线观看| 成人免费高清在线观看| 国产精欧美一区二区三区白种人| 久久精品国语| 91视频 -- 69xx| 激情久久久久| wwwjizzjizzcom| 国产福利第一视频| 欧美极品aⅴ影院| 国产视频久久久久久| 国产精品99久久久久| www.久久av.com| 美女网站色91| 亚洲五月天综合| 久久久久久久欧美精品| 国产免费黄色小视频| 国内精品99| 国产免费裸体视频| 欧美日韩国产高清| 男女h黄动漫啪啪无遮挡软件| 日产午夜精品一线二线三线| 欧美精品成人一区二区在线观看| 精品亚洲自拍| 国内一区在线| 秋霞蜜臀av久久电影网免费| 国产精品加勒比| 中文字幕日韩高清在线| 99re在线播放| jizz久久精品永久免费| 爱情岛论坛亚洲入口| 欧美高清hd| 不卡的av一区| 精品按摩偷拍| 久久国产精品 国产精品| 青青草原在线亚洲| 你懂的视频在线一区二区| 亚洲精华一区二区三区| 久久精品丝袜高跟鞋| 亚洲人和日本人hd| 日韩精品久久久| 日韩a一区二区| 国产91av视频在线观看| 自由日本语亚洲人高潮| 在线观看污视频| 亚洲黄色大片| 黑鬼大战白妞高潮喷白浆| 日本欧美大码aⅴ在线播放| 午夜两性免费视频| 国产在线乱码一区二区三区| 日本中文字幕有码| 国产成人av福利| 精品人妻一区二区三区日产乱码卜| 91看片淫黄大片一级在线观看| 欧美黑人欧美精品刺激| 欧美国产精品久久| 亚洲国产美女视频| 亚洲成a人片在线观看中文| 黑人精品无码一区二区三区AV| 色一情一乱一乱一91av| 亚洲自拍第二页| 精品三级在线观看| 欧美日韩国产亚洲沙发| 日韩在线观看你懂的| 在线heyzo| 奇米4444一区二区三区 | 91久久久久久久久| 国产三级精品三级在线观看国产| 精品视频一区二区| 97精品中文字幕| 91成人在线观看喷潮教学| 日韩av网站免费在线| 少妇极品熟妇人妻无码| 久久久亚洲欧洲日产国码αv| 精品在线观看一区| 午夜激情综合网| 国产一区二区麻豆| 亚洲激情视频网站| 国产美女在线观看| 日本三级韩国三级久久| 国产精品亚洲四区在线观看| 欧美二区三区| 欧美福利在线| 欧美日韩在线成人| av电影在线观看一区| 成人黄色短视频| 丁香五六月婷婷久久激情| 国产精品毛片一区二区在线看舒淇| 亚洲精品91美女久久久久久久| 尤物在线视频| 欧美在线一级视频| 中文字幕亚洲在线观看| 亚洲一区二区三区色| 中文一区二区| 激情av中文字幕| 国产精品美女一区二区在线观看| 在线观看免费国产视频| 91精品综合久久久久久| 国产黄色免费在线观看| 欧美亚洲国产视频小说| aaa国产精品视频| 国产麻豆电影在线观看| 日韩国产欧美在线观看| 国产精品无码网站| 亚洲成av人片在线| 精品国产av一区二区| 色偷偷88888欧美精品久久久| 伊人色综合一区二区三区影院视频| 91嫩草在线| 午夜激情久久| 亚洲一区二区三区四区五区| 久久久激情视频| 黄色在线视频网址| 亚洲激情免费观看| 成人免费观看在线观看| 成人免费在线看片| 国内精品久久久久久久影视蜜臀 | 欧美成aaa人片免费看| av成人免费看| 色大师av一区二区三区| 日韩av网站免费在线| 国产交换配乱淫视频免费| 日韩欧美在线视频日韩欧美在线视频| 男人天堂综合网| 国内揄拍国内精品少妇国语| 亚洲不卡在线| 国产一区二区三区在线免费| 国产美女精品人人做人人爽| 欧美卡一卡二卡三| 日韩欧美高清在线| 少女频道在线观看免费播放电视剧| 亚洲一区精品电影| 欧美国产日本| 日韩成人av影院| 五月天一区二区三区| 嫩草精品影院| 国产精欧美一区二区三区| 日韩一级毛片| 国内av一区二区| 一区二区三区在线视频观看| 成人av一区二区三区在线观看| 欧美激情亚洲一区| 激情视频极品美女日韩| 欧美s码亚洲码精品m码| 久久久久久久免费视频了| 国产伦精品一区二区三区视频我| 亚洲一区av在线播放| 久久久加勒比| 国产精品av免费观看| 成人网页在线观看| 国产精品免费精品一区| 中文字幕免费精品一区| 国产aa精品| 国产中文字幕二区| 国产亚洲欧洲997久久综合| 一本一道人人妻人人妻αv| 九九热在线精品视频| 欧美天堂社区| 欧美日韩中文不卡| 夜色激情一区二区| 天堂√在线中文官网在线| 国产精品日韩在线播放| 欧美国产三级| mm131美女视频| 91精品国产综合久久福利软件| 国产在线拍揄自揄拍视频| 久久久久久久久久久久久久一区 | 97超级碰碰| 国产日韩欧美三级| 国产亚洲精品精品精品| 日韩视频在线一区二区| 亚洲午夜天堂| 欧美xxxx吸乳| 久久久蜜桃精品| 国产黄色av片| 国产精品www| 亚洲无吗在线| 精品熟妇无码av免费久久| 精品剧情在线观看| 亚洲四虎影院| 欧美 日韩 国产在线观看| 国产精品国产三级国产aⅴ原创| 女人18毛片一区二区三区| 国产精品午夜一区二区欲梦| 一区二区三区高清视频在线观看| 91香蕉国产视频| 精品偷拍各种wc美女嘘嘘| 日本在线成人| 我看黄色一级片| 精品久久香蕉国产线看观看亚洲 |