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

iOS 代碼實踐總結

移動開發 iOS
最近一個月除了專門抽時間和精力重構之外,還有就是遇到需要添加功能的模塊的時候,由于項目中的代碼歷史因素比較多,第一件干的事情往往是重構整理代碼,發現很多之前的代碼寫的時候沒有注意的事情特別多,比如全局變量亂用;方法沒有層次感,胡亂添加;對業務不了解的情況下,通過打補丁的方式實現功能等等。

[[150186]]

前幾個月完成對MVVM/RAC的學習之后,最近一直在默默地對項目代碼進行重構,寫碼比較多,過了一段時間回頭發現自己的代碼風格還有代碼質量都有大大的改善。過去幾年在一家小公司負責iOS客戶端后來負責客戶端的研發工作,被雜亂的事情分神比較多,所以到去年的時候,寫碼已經不太多了。在新公司待了大半年,目前只是寫碼的小角色,所以精力基本上在寫業務代碼和業余學習亂七八糟的技術上面。

最近一個月除了專門抽時間和精力重構之外,還有就是遇到需要添加功能的模塊的時候,由于項目中的代碼歷史因素比較多,***件干的事情往往是重構整理代碼,發現很多之前的代碼寫的時候沒有注意的事情特別多,比如全局變量亂用;方法沒有層次感,胡亂添加;對業務不了解的情況下,通過打補丁的方式實現功能等等。所以我決定寫一篇文章,把自己的覺得實踐中需要注意的一些事項,具體總結一下分享給大家。

減少對象屬性

這個是最容易改善代碼質量的一個點,很多代碼一眼看上去就會讓人感覺很凌亂,一上來就是幾十個不同的對象變量定義在里面,這讓不同邏輯之間莫名其妙沒法分開。一個是定義的方式不對,很多莫名其妙的內部變量暴露在頭文件中,讓外部調用者根本不知道哪些才是public可以操作的方法。另外實際上,經過我自己這段時間的重構經驗來看,大多數是可以通過局部變量或者__block變量來代替的。

1. 頭文件中盡可能少暴露變量或方法,而要使用extension或者category放在.m文件,或者專門的private頭文件中

頭文件中暴露的信息越少越好,一切不必要的信息都不要暴露出來

 

m文件的extension中,定義conforms protocol和對象屬性,對于對象屬性的定義,使用getter/setter 來定義。

 

2. 使用局部變量或者__block變量代替

局部變量不需要多說,需要寫碼的時候思路清晰一些,寫完之后在commit之前即使review一定要check一遍,對自己的代碼質量負責,code review往往檢查不出來冗余或者廢棄的代碼。不添加一個多余的對象屬性,不留注釋掉的代碼,不留沒有用途的代碼,這些都是基本功,但是很多開發者就是做不到,或者說對寫碼沒有愛,所以很多廢棄的代碼,我重構代碼的時候,雖然對業務不熟悉,但是大多數模塊都能刪除掉十分之一的代碼和大量的對象屬性,這個是單純的不夠用心。

關于使用__block變量,這個是Android開發中我感覺到最不滿意的地方,這個特性簡直太他媽爽了。

比如這里,使用block的時候回傳一些變量

 

再比如這里,我需要記錄一個pan手勢開始時,headerView的頂部坐標,結合RAC之后,本來需要全局變量來記錄的值,使用__block變量即可搞定

3. 可以盡可能避免循環引用

有個地方很多開發者會疏漏,在block中使用_XXX對象變量的時候,block會retain self指針,一不小心就會造成循環引用的出現。所以使用局部變量的話,就能扼殺這種問題在搖籃之中。

減少和模塊化對象消息

1. 減少對象消息

減少UI的action類消息,感謝block和RAC,或者blockskit,讓我們得以通過hook來把之前target-action模型換為block來實現,UI和action的代碼終于可以一起了,使整個邏輯變得緊湊,在查看代碼的時候終于不用跳來跳去了。還有就是日常開發中,把自己寫的各種protocol或者傳遞target/selector的地方,盡量使用block來代替,相信我,這個會使代碼好讀很多。

2. 模塊化

使用”#pragma mark - XXX”進行分割不同邏輯之間的界限,讓整個文件閱讀起來更加結構化。還有一個我現在最常用的就是是設置Xcode的快捷鍵,把Ctrl + 6 顯示文檔結構的快捷鍵改為:Command + J ,搜索來快速跳轉到對應的消息和模塊,要盡量避免文檔結構顯示超過兩屏幕,超過兩屏幕說明有點多了,你肯定考慮一下重構了。

我個人習慣一般劃分的模塊有: life cycle,ui helper,datasource/delegate,依據功能進行劃分的模塊等等,如下是我最近重構的一個ViewController的文檔結構

 

MVVM && RAC

我自己使用MVVM思路的感覺是太爽了,說一下,MVVM不一定需要使用RAC,但是data binding少不了,在iOS中也就是KVO了,建議大家都去嘗試一下,我自己感覺這個基本上MVVM的最核心的東西了,連Android SDK也不得不引入這個特性。把數據部分的邏輯抽取放在ViewModel中,然后讓UI和ViewModel中的數據binding,這個不會減少代碼量,但是絕對可以大大簡化開發時邏輯的復度,再也不用重寫-setXXX:方法來update一大堆不相關的UI了,關于UI開發,后面會專門再講講新的。這里說一下我自己的理解,有人說RAC影響性能,回調棧太深,這個的確是會有的,但是個人感覺RACObserver是基于KVO實現的,調用的時候是同步調用的,所以對性能的影響有限,也不會出現調用順序的問題,所以我敢在列表開發中使用data binding,實踐之后還好,對用戶體驗沒什么影響。

關于RAC,即使你不使用RAC,有一些東西也是絕對值得你在項目中引入的,比如@weakify(self)/@strongify(self),通過預編譯查看的話,這個的做法是設置一個局部變量self來覆蓋全局的self,進而避免循環引用的,需要注意的是block層次較深的時候使用的問題,http://stackoverflow.com/questions/21716982/explanation-of-how-weakify-and-strongify-work-in-reactivecocoa-libextobjc。

RAC/MVVM,我剛開始學習的時候,寫了兩篇文章,算是我自己的總結,理解上面還有不足,跟大家參考一下:http://blog.csdn.net/colorapp/article/details/46524893,http://blog.csdn.net/colorapp/article/details/46537729。大家可以通過我博客中文章的參考鏈接學習。

UI開發

1. 重寫setter方法和Code Block Evaluation C Extension語法

重寫UI的getter方法,把UI的初始化放在getter中,減輕 -viewDidLoad的負荷,同時可以使整個頁面變得清晰;同時,可以通過使用使用GCC Code Block Evaluation C Extension ({…})語法,結構化局部變量初始化和處理的邏輯。關于這個語法,參考我之前的博客:http://blog.csdn.net/colorapp/article/details/47006771。關于setter代碼風格,可以參考別人寫的一篇文章,http://casatwy.com/iosying-yong-jia-gou-tan-viewceng-de-zu-zhi-he-diao-yong-fang-an.html,這個問題之前在我們Q群里探討之后我也非常認同這種方式寫UI。

舉一個例子,-viewDidLoad中,做為邏輯的入口,代碼會變少但是變清晰,代碼如下:

 

然后重寫bgView的getter方法,包括View和frame這些都可以使用({...})語法使代碼結構化層次化:

 

2. 復雜UI的開發

有時候我們開發業務的時候,產品需求往往非常復雜,酷炫的UI加上各種考慮全面的邏輯,這個的結果就是,碼農的超長代碼,而我們平時工作面對的也大多數都是這類問題。關于這個問題,我的解決方式,組合式UI / custom view / child view controller來解決。

(1) 組合式view

這個概念是從Android中借鑒而來。重構時查看項目中的代碼,發現大家用的做UI的時候,對這個概念不是很強烈,感覺是對UIView的view hierarchy理解不夠。比如一個復雜的UI,直接把所有的subviews直接堆積到super view上面,這樣的結果就是,調整subview的frame非常困難。我個人的做法是,首先對復雜UI進行分塊,從左到右或者從上倒下,把各個UI元素放到不同的container view上面,然后組合這些container view放到super view上面,這樣的好處非常明顯,首先UI干凈清晰,閱讀起來不那么費勁。其次就是你計算坐標或者設置約束會變得很簡單,因為你調整一個UI元素的時候,只需要考慮它與包含它的container view的坐標關系即可,而不是通過一大堆無趣計算跟最外層super view關聯起來。還有就是可以充分利用Auto Layout和autoresiziingmask這些UI利器,使用的時候會非常方便。再有就是結合RACObserver這個利器之后,你能很容易做到根據data來update ui。

舉個例子,是我們項目中前一段時間我重構的一個頁面,這個首頁列表,性能要求比較高。并沒有使用Auto Layout來實現,但是不使用Auto Layout并不是不把它寫的很干凈的理由。

 

這是我對一個UITableViewCell的分層,最外層由 icon view / right view / bottom view這些container view組成,而right view這個container view則又是由right top view / right middle view /right bottom view 這些 sub container view組合而成,而具體的UI元素則是放在這些sub container view之中。這樣UI代碼就會以一種層次化樣式展示出來,init/layoutsubviews只需要維護self與container view的關系即可,而具體展示數據的UI元素也只跟sub container view存在坐標關系。我們看一下right view這個container view的代碼實現:

 

關于性能的話,感謝iOS,我們不存在Android中頁面層次較深性能卡頓的問題,放心把UI層次化就行

(2) custom view

對于非常復雜并且相對獨立或者可以重用的UI,及時使用custom view子類化。對于單純的展示UI,我們只需要簡單通過組合式view就可以實現了。但是有時候,我們會遇到一些包含無論是動畫,邏輯都比較復雜的情況,這個時候使用組合式View去實現,一方面容易把邏輯弄混亂,會把文件的文檔結構變得很復雜,簡單來說就是對象的消息數量很多。這個時候,我們可以通過custom view來實現,實際上這個也是組合式view,但是我們是把這些組合式view變成了一個類而已,只暴露少量的接口給外部調用。如果這個custom view會出現在多個業務模塊中,那么有必要使用一個單獨的文件來容納這個類,如果僅僅是這個模塊一個使用的話,可以直接寫在這個業務模塊的文件中即可,沒有必要對所有的類都單獨一個文件,我們就當作這個“內部類”來弄了。

什么時候使用custom view而不是組合view,我想了很久,你覺得組合式view的代碼很亂的時候,別客氣,包裝為一個custom view就行了。我這邊最近遇到的幾個問題是使用UICollectionView來做部分UI的時候,同時還有其他很多UI元素,我會寫一個custom view。比如下面這個文件,把一個左右滑動查看圖片的UI使用PhotoView這個custom view進行包裝,內部使用UICollectionView實現一部分相對獨立的模塊,這個時候這個控件實際上是可以包裝為一個相對獨立的模塊的,用子類我感覺比較合適一些。

 

(3) container view controller

這個用法很多開發者不熟悉或者說是用的不多,但實際業務中,這個技術非常有用途,可以大大提高開發效率。對這部分知識不熟悉的,可以參考我之前的博客:http://blog.csdn.net/colorapp/article/details/45765601。對于有相對獨立業務邏輯以及生命周期要求的業務,使用child view controller進行包裝,如果parent view contrller與child view controller之間非常密切,則使用View Model以及block來對parent view controller和 child view controller 進行銜接。

使用child view controller來開發UI而不是custom view的優勢很多,我個人認為***優勢在于可以方便利用View Controller的生命周期以及View Controller Hierarchy,比如在-viewWillAppear/-viewDidDisappear中做一些操作,再比如直接獲取UINavigationController指針等等。之前的做法一般是在View Controller的對應生命周期內調用custom view的方法,傳遞self.navigationController指針給custom view等。所以可以不僅僅把UI相關的代碼包裝進入這個child view controller,也可以把網絡請求,數據處理這些這些邏輯放到child view controller中,這樣下來就能避免那種動不動超過1k行的view controller的出現了。

利用MVVM之后,還有一個比較有好處的用法,比如公用一些數據的時候,之前我們是把對象傳遞來傳遞去,這樣的問題是很容易出現混亂,這個時候我們是傳遞ViewModel就可以避免這個問題,ViewModel既負責網絡請求又負責數據處理,而parent view controller與child view controller所需要做的事情就是跟ViewModel進行binding而已。

Auto Layout/Masonry

在一些性能要求不是那么強烈的非列表頁,我們可以大量使用Auto Layout來開發UI,充分利用UI根據數據的自適應能力,連在container view中調整UI的步驟都不需要了。之前有一段時間我根本不想開發iOS,原因很簡單,Android的布局式以及可見式的開發方式非常方便,再加上AS這樣的神器,我自己感覺效率不比iOS低。自從項目***支持變到iOS6之后,我才開始使用Auto Layout,雖然比較費勁,但是感覺這個對UI開發來說是個解脫。

至于Masonry這個框架,之前我對這個抱有一定的懷疑不敢使用,所以我把源碼讀了一遍,發現這個包裝很薄很巧妙,很多設計思路也值得借鑒,對源碼有興趣的可以參考我的博客:http://blog.csdn.net/colorapp/article/details/45030163。我讀完源碼之后,嘗試著完全使用Mansory來開發一個展示信息的頁面,感覺太爽了!

這個的優勢就是你設置UI的數據之后,不需要再考慮去update ui了,這樣世界瞬時就清凈了。。。。,下面是我一個簡單的示例,結合({….})語法和RAC,可以使用最簡單的label這樣的命名來對UI設置數據,這個對我們開發UI來說,絕對是一種解脫。

 

 

說一下Auto Layout的問題:

1. 首先一個問題,是如果一個view不是leaf view的話,那么這個UIView如果hidden的話,它的約束仍然是work的,所以會留下空白,不會像Android中那樣設置GONE那么方便。國內sunny大神開源一個不錯的解決方式,https://github.com/forkingdog/UIView-FDCollapsibleConstraints。這里說一下我之前的解決方式,比較土逼,直接子類化:

 

2. 動畫的問題

使用Auto Layout有一個比較大的問題在于動畫,通過更改約束來進行動畫,一直是我比較頭疼的問題,所以一般遇到這類問題的時候,我都會盡量避免使用Auto Layout來解決,而是使用frame的方式來做。可以參考objc.io上面的一篇文章:http://www.objc.io/issues/3-views/advanced-auto-layout-toolbox/。

3. 多行UILabel的問題

iOS7以及以下的操作系統上,UILabel顯示多行文本是又不足的,你需要設置UILabel的preferredMaxLayoutWidth為一個固定值才能顯示多行文本。在iOS8以后就不再需要設置這個了。

 

4. UIScrollView的問題以及約束歧義和其他問題

參考我的文章:http://blog.csdn.net/colorapp/article/details/47007143

這個地方,我的建議是根據具體問題來選擇實現方式 :spring & structs也好,Auto Layout也好,那種解決問題較為簡潔快速就用那種,不一定非要固定于一種行為,尤其是開發的頁面有大量動畫的時候。

注釋

不要寫一堆中文注釋,代碼不要出現大量的中文,OC已經夠啰嗦,不要這么啰嗦地寫碼。除了提供服務的public功能或者方法,業務代碼僅在某些關鍵點上注釋一下就行,不需要一大堆中文,這樣太low,代碼自注釋即可,需要注釋的,可以通過喵神的Xcode插件來實現,https://github.com/onevcat/VVDocumenter-Xcode。

而對于出現拼音命名代碼的人,能做主的話,別猶豫,開掉吧。這里吐一下槽,之前的公司就有這樣的哥們,不是我招進來的,老板硬塞給我的。

善用OC的新語法

OC有很多新的語法糖,可以大大提高我們的效率,參考Apple Guide:https://developer.apple.com/library/ios/releasenotes/ObjectiveC/ModernizationObjC/AdoptingModernObjective-C/AdoptingModernObjective-C.html。

比如打印數字的時候,我們可以用@(xxx)來打印,定義枚舉的時候使用typedef NS_ENUM,使用instancetype而不用id等等。而最近又到了每年技能槽刷新的日子了,iOS 9發布了,OC又有了一些新語法,去學習一下多用用吧。

JSON數據的處理

新手往往會被這個稍微困惑一下,比如服務器返回的數據格式不正確啦,包含null啦,都很容易引起項目崩潰。這個問題可以使用Mantle來解決,很多兄弟都在使用這個,我自己倒是一直沒有用過。之前寫了一個小框架放在了github上面,https://github.com/lihei12345/CYJSONValidator,這個在我們項目內部也在使用,效果不錯,用來解析數據的時候,對數據的類型以及是否為null等進行校驗,確保解析出來數據類型的正確性。對于可能不存在key的時候,還可以設置一些默認值。

舉個例子:

 

block

使用block代替delegate,這個沒啥可多說的,把代碼變得非常緊湊,減少文件的消息數量,最主要的是關系沒那么緊密了。對于有大量的delegate方法才考慮使用protocol實現,這個時候block太多也影響閱讀。

同時,對于傳遞target/selector,也盡量使用block吧,這種閱讀查找起來太不方便了。

提交代碼

及時stage,這個非常重要,開發過程中經常需要經常比對上一步的代碼,這樣才能***程度上確保自己的改動是正確的。如果有一些小問題,也可以即使找到歷史版本。

及時commit,每完成一個相對完整的需求,就commit,小提交是個好習慣。

PR code review要做好,要花大量的時間做,有條件的話,***每個版本開一次總結會。

RAC封裝網絡請求

返回的signal要避免多次出現side effect,但不使用replay/replayLazily,因為dispose不會被調用。

使用RACCommand封裝請求,查看這幾篇文章:http://codeblog.shape.dk/blog/2013/12/05/reactivecocoa-essentials-understanding-and-using-raccommand/,https://github.com/ReactiveCocoa/ReactiveCocoa/issues/963,https://github.com/ReactiveCocoa/ReactiveCocoa/issues/1326。

結合RACCommand和takeUntil:來封裝一個可以cancel的請求。

責任編輯:chenqingxiang 來源: 李富強Jason 的博客
相關推薦

2017-09-22 10:53:52

HTTPHTTP2TCP協議

2013-06-14 11:21:43

iOS開發移動開發畫圖

2009-06-29 14:19:43

Strust2實踐

2021-10-27 06:49:35

低代碼開發平臺

2010-06-12 17:37:18

UML實踐指南

2013-09-12 15:37:09

iOS開發流程

2014-11-04 10:38:13

iOS圖形

2020-05-25 11:14:59

代碼程序開發

2017-05-12 09:24:21

Python代碼Logger

2012-08-09 09:10:56

代碼審查代碼

2017-11-10 13:02:44

iOSUI代碼

2022-09-01 08:17:15

Gateway微服務網關

2010-05-24 09:49:47

ADO.NET

2013-03-28 09:45:34

iOS學習筆記總結整理

2013-12-03 09:34:26

iOS應用開發實踐高質量Objectiv

2012-12-24 13:38:01

iOSUIView

2022-05-13 09:27:55

Widget機票業務App

2023-11-02 09:42:21

iOS屏幕旋轉

2022-08-25 06:42:00

飛書GCD 隊列啟動優化

2017-04-12 10:04:18

Scrum實踐終結
點贊
收藏

51CTO技術棧公眾號

97国产成人高清在线观看| 欧美久久天堂| 国产成人亚洲综合a∨婷婷图片 | 日本中文字幕在线观看| 理论电影国产精品| 久久久在线观看| 黄色片网站免费| 免费欧美网站| 国产日韩欧美一区在线 | 国产精品久久无码| a成人v在线| 亚洲午夜久久久久久久久电影院 | 国产精品亚洲欧美导航| 麻豆视频在线观看| 欧美在线观看视频一区| 精品国产凹凸成av人网站| 激情婷婷综合网| 你懂的网站在线| 日韩主播视频在线| 欧美黑人xxxⅹ高潮交| 亚洲自拍偷拍图| 超碰cao国产精品一区二区| 在线免费视频一区二区| 欧美精品卡一卡二| 黄色大片在线播放| 久久精品一区二区三区不卡牛牛 | 一区二区三区在线免费| 国产日韩欧美电影在线观看| 88久久精品无码一区二区毛片| 亚洲精品成人一区| 色综合色综合色综合色综合色综合| 国产成人av一区二区三区| 日本成人一级片| 一本久道久久综合狠狠爱| 中文字幕一区二区三区久久网站| 激情久久久久久久| 亚洲欧洲免费视频| 在线精品视频播放| www999久久| 欧美性受xxxx| 国产精品亚洲αv天堂无码| 超碰在线最新网址| 一区二区三区鲁丝不卡| 欧美xxxx吸乳| 毛片在线看片| 国产日产欧美一区二区三区| 精品无人区一区二区三区 | 欧美va天堂va视频va在线| 今天免费高清在线观看国语| 国产69久久| 久久久午夜电影| 国产一区在线免费观看| 二区三区在线视频| 国产成人一区二区精品非洲| 亚洲最大av网站| 国产精品欧美综合亚洲| 久久99精品久久只有精品| 国产精品高潮在线| 中文字幕免费播放| 久久99精品视频| 91在线国产电影| 午夜精品无码一区二区三区| 国产成人av一区二区三区在线| y111111国产精品久久婷婷| 日韩三级视频在线| 日韩视频一区| 庆余年2免费日韩剧观看大牛| 中文字幕视频网站| 巨乳诱惑日韩免费av| 国产精品第七十二页| 最新黄色网址在线观看| 精品综合免费视频观看| 亚洲va欧美va国产综合剧情| www.日日夜夜| 成人av电影免费观看| 日本三级中国三级99人妇网站| 久久国产精品高清一区二区三区| 久久久精品免费免费| 性欧美精品一区二区三区在线播放 | 色综合电影网| 草莓福利社区在线| 亚洲国产精品久久不卡毛片| 国产精品国产亚洲精品看不卡| 瑟瑟视频在线看| 欧美四级电影在线观看| 中文字幕在线视频一区二区| 久久精品色播| 国产亚洲日本欧美韩国| 午夜精品一区二区三区视频| 亚洲先锋成人| 国产成人亚洲精品| 国产激情久久久久久熟女老人av| av一区二区三区| 国产免费成人av| 午夜精品久久久久久久99热黄桃 | 黑人操日本美女| 亚州综合一区| 最近2019中文字幕一页二页| 校园春色 亚洲| 欧美一级二区| 成人性生交xxxxx网站| 老牛影视av牛牛影视av| 亚洲国产精品精华液2区45| 国产女主播av| 日本欧美日韩| 欧美精品一区二区三区视频| 亚洲精品成人av久久| 欧美日韩一区自拍 | 欧美高清一级片| 国产丝袜视频一区| 国产精品成人免费观看| 肉肉av福利一精品导航| 超碰97网站| 视频三区在线| 日韩欧美国产成人| 亚洲一二三四五| 国产乱码精品一区二区三区亚洲人| 精品福利二区三区| 一区二区国产精品精华液| 麻豆9191精品国产| 26uuu亚洲国产精品| 一区二区的视频| 91免费观看视频在线| 99久久99久久精品| 九七电影院97理论片久久tvb| 亚洲激情自拍图| 免费在线一级片| 紧缚奴在线一区二区三区| 青青成人在线| 亚洲妇女成熟| 亚洲国产精品久久久| 欧美日韩免费一区二区| 久草精品在线观看| 色狠狠久久av五月综合| 国模套图日韩精品一区二区| 欧美主播一区二区三区美女| 中文字幕人妻一区二区三区| 欧美三级乱码| av一区二区三区免费| 超碰caoporn久久| 91精品国产91久久久久久一区二区| 欧美人妻一区二区三区 | 三级视频中文字幕| 亚洲成人精品综合在线| 一本色道久久88精品综合| 国产 日韩 欧美 在线| 久久精品欧洲| 麻豆精品视频| 亚洲欧美一区二区三区| 国产视频在线一区二区| 日日噜噜噜噜人人爽亚洲精品| www.久久久久久久久| 毛片在线播放视频| 九色丨蝌蚪丨成人| 26uuu另类亚洲欧美日本老年| 天堂中文资源在线| 国产日韩一级二级三级| 日韩视频在线免费看| 精品在线91| 国产成人在线一区| porn视频在线观看| 亚洲最大色网站| 亚洲国产精品第一页| 91久久夜色精品国产九色| 精品国产乱码久久久久久郑州公司 | 亚洲18私人小影院| 涩涩视频在线观看免费| 日韩欧美亚洲综合| 美国美女黄色片| 国产在线视频一区二区三区| 国产激情片在线观看| 免费成人蒂法| 国产精品久久久久久久久久免费 | 亚洲影院在线观看| 欧美xxxxx精品| 日韩精品亚洲一区| 久久观看最新视频| 美女一区二区在线观看| 国产成人高清激情视频在线观看 | mm131国产精品| 加勒比久久高清| 欧美制服第一页| aiai在线| 精品欧美久久久| 国产免费一级视频| 99这里只有久久精品视频| 久久精品免费一区二区| 精品国产中文字幕第一页| 久久久免费观看视频| 日本护士...精品国| 欧美日韩1234| 日本少妇性生活| 中文字幕在线不卡一区二区三区| 免费看91视频| 蜜臀久久久久久久| 欧美日韩一区二区三区在线观看免 | 成人在线观看网址| 久草视频在线资源站| 99久久精品国产网站| 久久久国产欧美| 亚洲无吗在线| 亚洲三区在线观看| 日韩欧美黄色| 亚洲www视频| 欧美色999| 久久久久久网址| 日本中文在线| 亚洲精品资源在线| 亚洲精品成av人片天堂无码| 欧美午夜电影网| 9i看片成人免费看片| 依依成人精品视频| 国产精品18在线| 91麻豆精品国产91久久久平台| 97超碰人人看人人| 成人免费黄色| 欧美性受xxxx白人性爽| av免费网站在线观看| 国产一区二区激情| 水莓100国产免费av在线播放| 欧美福利电影网| 波多野结衣mp4| 欧美日韩国产一区中文午夜| 日韩欧美综合视频| 亚洲国产精品高清| 欧美黄色一级生活片| 99久久婷婷国产综合精品电影| 亚洲午夜精品一区| 日韩电影在线观看电影| www.中文字幕在线| 激情成人亚洲| 国产精品久久久久9999爆乳| **女人18毛片一区二区| 一区二区三区在线观看www| 奇米狠狠一区二区三区| 久久久久久九九九九| 男人的天堂久久| 国产一区二区自拍| 国产精品x8x8一区二区| yellow视频在线观看一区二区| 国产精品日本一区二区不卡视频| 国产精品亚洲美女av网站| 高清亚洲高清| 国产日韩在线播放| 日本一区二区中文字幕| 国产欧美日韩最新| 日韩精品一页| 国产日韩欧美视频在线| 91精品网站在线观看| 91欧美精品午夜性色福利在线| 综合久草视频| 91久久国产综合久久91精品网站| 视频欧美精品| 亚洲自拍高清视频网站| 日韩精品一区二区三区中文字幕| 91成人免费看| 成人在线视频你懂的| 好看的日韩精品| 天堂在线精品| 日韩欧美一区二区在线观看| 日韩国产一区| 福利在线小视频| 亚洲黄色视屏| 欧洲av无码放荡人妇网站| 日韩高清一区在线| 亚洲天堂国产视频| 国产不卡一区视频| yy6080午夜| 国产偷v国产偷v亚洲高清| 性色国产成人久久久精品| 亚洲免费电影在线| 日本视频www| 欧美三级电影网| 99精品在线看| 日韩高清a**址| www.成人.com| 久久久久久久香蕉网| 欧美成a人片在线观看久| 国产欧美日韩免费| 草草视频在线一区二区| 欧洲精品码一区二区三区免费看| 凹凸成人精品亚洲精品密奴| 国产日产欧美一区二区| 夜夜嗨av一区二区三区网站四季av| 亚洲不卡视频在线| 懂色av一区二区夜夜嗨| 亚洲国产av一区| 国产精品剧情在线亚洲| 国产乡下妇女做爰视频| 欧美午夜视频网站| 欧美77777| 日韩中文字幕在线看| 美女视频在线免费| 成人精品一区二区三区| 乱亲女h秽乱长久久久| 亚洲精品中文字幕乱码三区不卡| 欧美精品麻豆| 无码日韩人妻精品久久蜜桃| 国产成人精品亚洲午夜麻豆| 一区二区精品免费| 一个色妞综合视频在线观看| 成年人晚上看的视频| 日韩欧美国产午夜精品| 电影在线一区| 国内精品久久久久久久| 国产精品色婷婷在线观看| 欧洲一区二区在线| 亚洲国产激情| 午夜av中文字幕| 国产日韩欧美亚洲| 成年人免费看毛片| 日韩色在线观看| 青青影院在线观看| 日韩免费视频在线观看| 大桥未久女教师av一区二区| 一区二区三区四区| 日韩电影一区二区三区| 美国黄色一级毛片| 亚洲午夜电影在线| 国产手机视频在线| 中文字幕亚洲欧美| 欧美男体视频| 久久久久久久免费| 影音先锋中文字幕一区二区| www.成年人| 国产精品天美传媒| 中文区中文字幕免费看| 亚洲欧美另类在线观看| 涩涩在线视频| 久久精品日韩精品| 一区二区国产在线观看| 国产精品成人无码专区| 亚洲成av人片www| 亚洲精品国产精品乱码不卡| 久久91亚洲人成电影网站| 99久久这里有精品| 男人的天堂成人| 国内精品国产成人| 国产老头老太做爰视频| 91精品蜜臀在线一区尤物| 韩国av网站在线| 亚洲精品女av网站| 欧美日韩免费| 在线播放av网址| 天天综合色天天| 三级无遮挡在线观看| 日产精品久久久一区二区福利| 欧美日韩一区二区三区四区不卡| 男人的天堂狠狠干| 91丝袜呻吟高潮美腿白嫩在线观看| 国产精品99精品| 亚洲国产精品中文| 中文字幕在线直播| 色女人综合av| 国产一区日韩二区欧美三区| 黄视频网站免费看| 精品国产免费一区二区三区四区| 青春草视频在线观看| 国产一级二级三级精品| 性欧美videos另类喷潮| 手机毛片在线观看| 欧美裸体bbwbbwbbw| 日韩激情av| 精品日韩电影| 免费观看在线综合色| 久久免费看少妇高潮v片特黄| 欧美电影精品一区二区| 小草在线视频免费播放| 性欧美精品一区二区三区在线播放| 久久av资源站| 国产一级在线观看视频| 亚洲欧美综合精品久久成人| 九九九精品视频| 性一交一乱一伧国产女士spa| 337p粉嫩大胆色噜噜噜噜亚洲| 亚洲男人天堂网址| 久久91亚洲人成电影网站| 天天躁日日躁狠狠躁欧美| 99re精彩视频| 亚洲香蕉伊在人在线观| 国模吧精品人体gogo| 91网站在线看| 亚洲综合好骚| 国精产品视频一二二区| 精品成人在线视频| 高清av电影在线观看| 91精品国产99久久久久久红楼| 日韩香蕉视频| 日日操免费视频| 亚洲高清色综合| 粉嫩91精品久久久久久久99蜜桃| 男人草女人视频| 久久久久久**毛片大全| 99国产精品一区二区三区| 热99精品里视频精品| 一本精品一区二区三区| 亚洲熟妇无码av| 日韩亚洲欧美中文三级| 97精品国产综合久久久动漫日韩| 激情五月六月婷婷|