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

欧美,日韩,国产在线| 亚洲一区二区三区香蕉| 一级做a爰片毛片| 久久精品女人天堂av免费观看| 久久日韩精品一区二区五区| 国产精品羞羞答答| 少妇aaaaa| 亚洲国产最新| 欧美美女视频在线观看| 黄色三级中文字幕| 九一国产在线| 国产精品综合二区| 欧亚精品中文字幕| 久久国产高清视频| 日韩深夜福利| 日韩一区二区三区免费观看| 欧美国产激情视频| 菠萝菠萝蜜在线观看| 久久综合99re88久久爱| 亚洲一区二区三区777| 黄色片中文字幕| 欧美激情第8页| 在线电影av不卡网址| 亚洲精品乱码久久| 国产一区二区三区亚洲综合| 粉嫩老牛aⅴ一区二区三区| 国产大尺度在线观看| 国产视频三级在线观看播放| 波多野结衣精品在线| 国产一区二区丝袜| 天天干,天天干| 亚洲精品美女| 欧美黄色www| 国产精品视频看看| 欧美日韩国产一区二区三区不卡 | 在线观看黄色网| 一本色道精品久久一区二区三区| 草民午夜欧美限制a级福利片| 精品人妻无码一区二区三区换脸 | 91麻豆精品国产自产在线| 久久国产乱子伦免费精品| 四季久久免费一区二区三区四区| 国产精品不卡一区| 特级西西444www大精品视频| 亚洲av片在线观看| 99久久久国产精品免费蜜臀| 91精品国产综合久久久久久丝袜| 国产精品国产三级国产普通话对白| 日韩av二区在线播放| 青青草精品毛片| 西西44rtwww国产精品| 极品中文字幕一区| 久久久久久国产精品美女| 久草视频在线资源| 欧美fxxxxxx另类| 欧美久久精品午夜青青大伊人| www.涩涩爱| 久久国产综合| 久久精品国产亚洲7777| 亚洲最大的黄色网址| 亚洲九九在线| 欧美另类99xxxxx| 欧美精品xxxxx| 一区免费在线| 57pao精品| 国产精品免费精品一区| 日韩av电影一区| 成人a在线观看| 国产三级视频在线播放| 国产成人三级在线观看| 国产乱码精品一区二区三区卡 | av久久久久久| 久久香蕉av| 天天色图综合网| 青青草av网站| 成人亚洲精品| 精品国产免费人成在线观看| 中国一级特黄录像播放| 欧美人与牛zoz0性行为| 最近2019年好看中文字幕视频 | 黑人欧美xxxx| 白嫩少妇丰满一区二区| jizz免费一区二区三区| 91精品国产综合久久香蕉的特点| 6080国产精品| 欧美男男freegayvideosroom| 亚洲视频777| www.97视频| 亚洲精品极品| 国产精品自产拍在线观| www.日韩高清| 久久久久国产精品人| 亚州欧美一区三区三区在线| 成a人片在线观看| 欧美日韩一区免费| 91小视频在线播放| 欧美成a人免费观看久久| 一区二区三区四区在线观看视频| 人妻人人澡人人添人人爽| 中文国产一区| 成人av番号网| 亚洲日本香蕉视频| 亚洲日穴在线视频| 日韩精品xxxx| 精品国产亚洲一区二区三区| 亚洲精品成人免费| 美国一级黄色录像| 最新日韩在线| 亚洲va久久久噜噜噜| 亚洲av片一区二区三区| 亚洲精品久久嫩草网站秘色| 女性隐私黄www网站视频| 日本中文字幕视频一区| 国产午夜精品理论片a级探花| 成人免费毛片xxx| 久久久久久9| 国产免费一区二区三区| 免费在线看黄色| 欧美视频一区二区三区…| 91日韩精品视频| 久9久9色综合| 91超碰caoporn97人人| 国产剧情久久久| 国产欧美视频一区二区三区| 欧妇女乱妇女乱视频| 日韩福利影视| 国产亚洲欧洲高清一区| 国产原创视频在线| av电影天堂一区二区在线观看| 中文字幕在线亚洲三区| 日本欧美不卡| 亚洲欧美日韩一区二区在线| 日本熟妇色xxxxx日本免费看| 韩日精品视频一区| 一本久道久久综合狠狠爱亚洲精品| 中文字幕乱码在线播放| 亚洲国产精品人久久电影| 免费在线黄色网| 精品一区二区在线播放| 午夜精品电影在线观看| free欧美| 国产亚洲一级高清| 自拍偷拍第八页| 久久久久久毛片| 成年人小视频网站| 综合综合综合综合综合网| 97超级碰碰人国产在线观看| 日本高清视频网站| 精品久久久久久国产91| 中文文字幕文字幕高清| 99国产精品久久久久久久| 操人视频欧美| 成人爽a毛片免费啪啪动漫| 日韩欧美三级在线| 久久精品久久精品久久| 成人国产在线观看| 少妇高潮毛片色欲ava片| 另类图片第一页| 国产91ⅴ在线精品免费观看| 欧美视频综合| 欧美亚洲精品一区| 亚洲欧美综合7777色婷婷| 韩国成人精品a∨在线观看| av磁力番号网| 91精品国产自产精品男人的天堂 | 一本久道久久综合| 国产成年精品| 久久久久免费精品国产| 午夜视频www| 色综合久久久久综合体桃花网| 免费看污片网站| 久久精品国产99| 女同性恋一区二区| 九九热hot精品视频在线播放| 97成人在线视频| 成人免费在线视频网| 在线成人av网站| 久久精品女人毛片国产| 91免费观看视频| 亚洲久久中文字幕| 亚洲视屏一区| 日韩免费三级| 欧美专区视频| 奇米四色中文综合久久| 一级日本在线| 亚洲第一黄色网| 人妻中文字幕一区二区三区| 亚洲人精品午夜| 国产高清自拍视频| 精品影视av免费| 免费欧美一级视频| 亚洲欧洲美洲一区二区三区| 精品国产福利| 青草综合视频| 欧美亚洲第一区| 成人福利网站| 亚洲欧美日韩国产中文| 国产夫妻性生活视频| 精品国产鲁一鲁一区二区张丽| 国精产品一区一区| 91美女片黄在线| 九九九久久久久久久| 蜜桃久久av| 日韩精品一区二区三区四| 国产一区二区在线| 丁香五月网久久综合| 精品久久在线| 日本精品视频网站| 91精品国产黑色瑜伽裤| 久久精品青青大伊人av| 免费理论片在线观看播放老| 欧美一级xxx| 中文字幕人妻色偷偷久久| 午夜视频在线观看一区二区| 日韩欧美123区| 国产欧美精品区一区二区三区| 99免费观看视频| 狠狠v欧美v日韩v亚洲ⅴ| 成人在线观看a| 9国产精品视频| 国产精品69久久久| 欧美成人午夜| 亚洲一区三区| 精品国产乱码久久久| 国精产品99永久一区一区| 日韩欧美另类中文字幕| 成人网在线免费看| av成人免费看| 国产精品美乳一区二区免费| 亚洲天堂导航| 2019中文字幕在线观看| 国产盗摄一区二区| 欧美高清视频在线播放| 岛国中文字幕在线| www.日韩.com| 日韩黄色影院| 色偷偷亚洲男人天堂| 欧美日韩激情视频一区二区三区| 亚洲精品国产综合区久久久久久久| www.色视频| 精品国产一区久久| www.日韩在线观看| 精品三级av在线| 成人免费观看在线视频| 日韩欧美国产午夜精品| 国产黄色片网站| 欧美大片在线观看一区二区| 精品人妻午夜一区二区三区四区| 在线综合亚洲欧美在线视频| 91国内精品视频| 911精品国产一区二区在线| 国产精品高潮呻吟AV无码| 欧美一区在线视频| 国产成人精品无码高潮| 日韩精品一区国产麻豆| 日韩在线观看视频一区| 亚洲精品国产电影| 欧美少妇另类| 中文字幕日韩有码| 黄色免费在线观看| 欧美二区在线播放| 波多野结衣中文在线| 5566日本婷婷色中文字幕97| 深夜成人影院| 国产综合久久久久久| 无码国模国产在线观看| 国产精品污www一区二区三区| 欧美午夜18电影| 日本最新一区二区三区视频观看| 日韩欧美午夜| 久久久99精品视频| 99成人精品| 久久99999| 国产精品66部| 国产精品成人99一区无码| 久久综合999| 国产精品视频看看| 亚洲成人精品一区二区| 你懂的国产在线| 欧美精品一二三| 黄色片一区二区三区| 国产亚洲福利一区| 中文字幕有码在线观看| 欧美在线xxx| 欧美高清免费| 国产精品一区视频网站| 欧美日韩国产一区二区三区不卡| 国产a级片免费看| 亚洲茄子视频| 欧美在线aaa| 成人福利视频在线看| 国产三级av在线播放| 亚洲黄色免费网站| 成人毛片一区二区三区| 欧美一二三区在线观看| 深夜福利视频一区| 久久福利视频网| 欧美成人免费电影| 成人区精品一区二区| 成人国产精品一级毛片视频| 欧美日韩激情四射| 麻豆视频观看网址久久| 国产成人av无码精品| 中文幕一区二区三区久久蜜桃| 久久精品亚洲无码| 欧美日韩国产精品自在自线| 天天色天天操天天射| 精品国产一区二区三区久久久狼 | 亚洲中文字幕一区| 中文字幕在线免费不卡| 午夜精品久久久久久久久久久久久蜜桃| 欧美酷刑日本凌虐凌虐| 深夜福利免费在线观看| 久久久久久九九九| 国产一区二区三区黄网站| 日韩精品不卡| 午夜亚洲影视| 日韩av无码一区二区三区不卡| **欧美大码日韩| 国产亚洲欧美日韩高清| 亚洲精品美女网站| 伊人影院蕉久影院在线播放| 国产精品国产自产拍高清av水多| 国产精品超碰| 日韩精品一区二区三区四| 极品少妇一区二区| 成人无码精品1区2区3区免费看| 色婷婷av一区二区三区大白胸| 蜜臀av中文字幕| 欧美国产亚洲精品久久久8v| 国产精品欧美一区二区三区不卡 | 里番在线播放| 91精品国产99久久久久久红楼| 欧美丝袜激情| 无人在线观看的免费高清视频| 久久综合九色欧美综合狠狠| 国产成人在线观看网站| 精品久久五月天| 免费在线看污片| 成人免费在线一区二区三区| 亚洲视频高清| 制服丝袜av在线| 天天色综合成人网| 欧洲一级在线观看| 日韩女优人人人人射在线视频| 中文字幕精品影院| 激情五月婷婷久久| 国产日韩欧美精品一区| 欧美日韩 一区二区三区| 一本大道亚洲视频| 国产91在线播放精品| 亚洲精品久久区二区三区蜜桃臀| 日韩高清在线一区| 萌白酱视频在线| 51久久夜色精品国产麻豆| caoporn免费在线视频| 99国产视频| 在线一区免费观看| 日本二区在线观看| 欧美性感一区二区三区| 免费在线视频欧美| 国产精品乱码视频| 国产精品日韩精品欧美精品| 亚洲精品国产一区黑色丝袜| 欧美日韩国产在线观看| 中中文字幕av在线| 精品欧美一区二区久久久伦| 久久久xxx| 一本色道久久88| 日韩欧美不卡在线观看视频| 97人人在线视频| 日韩欧美亚洲在线| 国产麻豆精品95视频| 日本三级免费看| 亚洲网在线观看| 精品国产18久久久久久二百| 麻豆tv在线播放| 欧美国产1区2区| 亚洲av无码国产精品永久一区| 91国内精品久久| 久久激情电影| yjizz视频| 欧美揉bbbbb揉bbbbb| 羞羞电影在线观看www| 久久精品丝袜高跟鞋| 蜜芽一区二区三区| 国产真实乱人偷精品视频| 国产一区二区欧美日韩| 色悠久久久久综合先锋影音下载| 国产精品网站免费| 亚洲欧美综合色| 香蕉视频黄在线观看| 国产在线视频欧美| 亚洲激情亚洲| 开心激情五月网| 日韩精品高清视频| 国产高清精品二区| 国产天堂在线播放| 亚洲成人av一区二区| 免费a级在线播放|