日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

iOS面试准备 - ios篇

發(fā)布時(shí)間:2023/12/8 编程问答 49 豆豆
生活随笔 收集整理的這篇文章主要介紹了 iOS面试准备 - ios篇 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

iOS面試準(zhǔn)備 - ios篇
ios面試準(zhǔn)備 - objective-c篇
ios面試準(zhǔn)備 - 網(wǎng)絡(luò)篇
IOS面試準(zhǔn)備 - C++篇
iOS面試準(zhǔn)備 - 其他篇

運(yùn)行時(shí)

https://juejin.cn/post/6844903586216804359

Runtime消息發(fā)送機(jī)制
首先進(jìn)行方法的查找:
1)iOS調(diào)用一個(gè)方法時(shí),實(shí)際上會(huì)調(diào)用objc_msgSend(receiver, selector, arg1, arg2, …),該方法第一個(gè)參數(shù)是消息接收者,第二個(gè)參數(shù)是方法名,剩下的參數(shù)是方法參數(shù);
2)iOS調(diào)用一個(gè)方法時(shí),會(huì)先去該類的方法緩存列表里面查找是否有該方法,如果有直接調(diào)用,否則走第3)步;
3)去該類的方法列表里面找,找到直接調(diào)用,把方法加入緩存列表;否則走第4)步;
4)沿著該類的繼承鏈繼續(xù)查找,找到直接調(diào)用,把方法加入緩存列表;否則消息轉(zhuǎn)發(fā)流程;

如果沒(méi)有找到方法,開(kāi)始消息的轉(zhuǎn)發(fā)流程:

1)動(dòng)態(tài)消息解析。檢查是否重寫了resolveInstanceMethod 方法,如果返回YES則可以通過(guò)class_addMethod 動(dòng)態(tài)添加方法來(lái)處理消息,否則走第2)步;
2)消息target轉(zhuǎn)發(fā)。forwardingTargetForSelector 用于指定哪個(gè)對(duì)象來(lái)響應(yīng)消息。如果返回nil 則走第3)步;
3)消息轉(zhuǎn)發(fā)。這步調(diào)用 methodSignatureForSelector 進(jìn)行方法簽名,這可以將函數(shù)的參數(shù)類型和返回值封裝。如果返回 nil 執(zhí)行第四步;否則返回 methodSignature,則進(jìn)入 forwardInvocation ,在這里可以修改實(shí)現(xiàn)方法,修改響應(yīng)對(duì)象等,如果方法調(diào)用成功,則結(jié)束。否則執(zhí)行第4)步;
4)報(bào)錯(cuò) unrecognized selector sent to instance。

load和initialize
+load在main函數(shù)之前被Runtime調(diào)用,+initialize 方法是在類或它的子類收到第一條消息之前被調(diào)用的,這里所指的消息包括實(shí)例方法和類方法的調(diào)用。

load
當(dāng)類被引用進(jìn)項(xiàng)目的時(shí)候就會(huì)執(zhí)行l(wèi)oad函數(shù)(在main函數(shù)開(kāi)始執(zhí)行之前),與這個(gè)類是否被用到無(wú)關(guān),每個(gè)類的load函數(shù)只會(huì)自動(dòng)調(diào)用一次.由于load函數(shù)是系統(tǒng)自動(dòng)加載的,因此不需要調(diào)用父類的load函數(shù),否則父類的load函數(shù)會(huì)多次執(zhí)行。

當(dāng)父類和子類都實(shí)現(xiàn)load函數(shù)時(shí),父類的load方法執(zhí)行順序要優(yōu)先于子類
類中的load方法執(zhí)行順序要優(yōu)先于類別(Category)
當(dāng)有多個(gè)類別(Category)都實(shí)現(xiàn)了load方法,這幾個(gè)load方法都會(huì)執(zhí)行,但執(zhí)行順序不確定(其執(zhí)行順序與類別在Compile Sources中出現(xiàn)的順序一致)
當(dāng)然當(dāng)有多個(gè)不同的類的時(shí)候,每個(gè)類load 執(zhí)行順序與其在Compile Sources出現(xiàn)的順序一致

initialize
initialize在類或者其子類的第一個(gè)方法被調(diào)用前調(diào)用。即使類文件被引用進(jìn)項(xiàng)目,但是沒(méi)有使用,initialize不會(huì)被調(diào)用。由于是系統(tǒng)自動(dòng)調(diào)用,也不需要再調(diào)用 [super initialize] ,否則父類的initialize會(huì)被多次執(zhí)行。假如這個(gè)類放到代碼中,而這段代碼并沒(méi)有被執(zhí)行,這個(gè)函數(shù)是不會(huì)被執(zhí)行的。
1.父類的initialize方法會(huì)比子類先執(zhí)行
2.當(dāng)子類未實(shí)現(xiàn)initialize方法時(shí),會(huì)調(diào)用父類initialize方法,子類實(shí)現(xiàn)initialize方法時(shí),會(huì)覆蓋父類initialize方法.
3.當(dāng)有多個(gè)Category都實(shí)現(xiàn)了initialize方法,會(huì)覆蓋類中的方法,只執(zhí)行一個(gè)(會(huì)執(zhí)行Compile Sources 列表中最后一個(gè)Category 的initialize方法)

怎么確保在load和initialize的調(diào)用只執(zhí)行一次:
由于load和initialize可能會(huì)調(diào)用多次,所以在這兩個(gè)方法里面做的初始化操作需要保證只初始化一次,用dispatch_once來(lái)控制

runtime應(yīng)用
關(guān)聯(lián)對(duì)象(Objective-C Associated Objects)給分類增加屬性
方法魔法(Method Swizzling)方法添加和替換和KVO實(shí)現(xiàn)
消息轉(zhuǎn)發(fā)(熱更新)解決Bug(JSPatch)
實(shí)現(xiàn)NSCoding的自動(dòng)歸檔和自動(dòng)解檔
實(shí)現(xiàn)字典和模型的轉(zhuǎn)換(YYModel)

RunLooper

https://segmentfault.com/a/1190000023390697
線程和 RunLoop 之間是一一對(duì)應(yīng)的,其關(guān)系是保存在一個(gè)全局的 Dictionary 里。線程剛創(chuàng)建時(shí)并沒(méi)有 RunLoop,如果你不主動(dòng)獲取,那它一直都不會(huì)有。RunLoop 的創(chuàng)建是發(fā)生在第一次獲取時(shí),RunLoop 的銷毀是發(fā)生在線程結(jié)束時(shí)。

系統(tǒng)默認(rèn)注冊(cè)了5個(gè)Mode:
kCFRunLoopDefaultMode: App的默認(rèn) Mode,通常主線程是在這個(gè) Mode 下運(yùn)行的。
UITrackingRunLoopMode: 界面跟蹤 Mode,用于 ScrollView 追蹤觸摸滑動(dòng),保證界面滑動(dòng)時(shí)不受其他 Mode 影響。
UIInitializationRunLoopMode: 在剛啟動(dòng) App 時(shí)第進(jìn)入的第一個(gè) Mode,啟動(dòng)完成后就不再使用。
GSEventReceiveRunLoopMode: 接受系統(tǒng)事件的內(nèi)部 Mode,通常用不到。
kCFRunLoopCommonModes: 這是一個(gè)占位的 Mode,沒(méi)有實(shí)際作用。

與GCD關(guān)系:當(dāng)調(diào)用 dispatch_async(dispatch_get_main_queue(), block) 時(shí),libDispatch 會(huì)向主線程的 RunLoop 發(fā)送消息,RunLoop會(huì)被喚醒,并從消息中取得這個(gè) block,并在回調(diào)

解決NSTimer事件在列表滾動(dòng)時(shí)不執(zhí)行問(wèn)題
因?yàn)槎〞r(shí)器默認(rèn)是運(yùn)行在NSDefaultRunLoopMode,在列表滾動(dòng)時(shí)候,主線程會(huì)切換到UITrackingRunLoopMode,導(dǎo)致定時(shí)器回調(diào)得不到執(zhí)行。
有兩種解決方案:
● 指定NSTimer運(yùn)行于 NSRunLoopCommonModes下。
● 在子線程創(chuàng)建和處理Timer事件,然后在主線程更新 UI。

GCD

GCD是核心XNU內(nèi)核級(jí)實(shí)現(xiàn)的高效多線程編程功能。

dispatch_queue_create 創(chuàng)建隊(duì)列

dispatch_get_main_queue() 獲取主隊(duì)列

dispatch_get_global_queue();并行隊(duì)列,優(yōu)先級(jí)依次為:ios7:高,默認(rèn),低,后臺(tái). ios7之后:用戶交互,用戶需要,默認(rèn),工具級(jí),后臺(tái),沒(méi)有指定。

dispatch_set_target_queue 變更優(yōu)先級(jí)

dispatch_after 在一定時(shí)間之后執(zhí)行

dispatch_time(DISPATCH_TIME_NOW, 200ull * NSEC_PER_SEC); 時(shí)間變量

dispatch_group_t group = dispatch_group_create(); 創(chuàng)建組
dispatch_group_async(group, queue, ^{NSLog(@“1”);}); 使用組
dispatch_group_notify(group, queue, ^{NSLog(@“4”);}); 在一組最后執(zhí)行

dispatch_barrier_async 在這個(gè)調(diào)用之前的async先完成,再調(diào)用這個(gè)的代碼塊,在這個(gè)之調(diào)用后,在他之后的async才開(kāi)始執(zhí)行

dispatch_sync是等待處理執(zhí)行結(jié)束后,再繼續(xù)

dispatch_apply 自動(dòng)適配線程,循環(huán)處理指定次數(shù)

dispatch_once 保證只執(zhí)行一次,可以用在單例模式

+(instancetype)sharedInstance{static MyClass *sharedInstance = nil;static dispatch_once_t onceToken;dispatch_once(&onceToken, ^{sharedInstance = [[MyClass alloc]init];});return _sharedInstance; }

dispatch_semaphore_create 創(chuàng)建信號(hào)量 自旋鎖
dispatch_semaphore_signal 信號(hào)量加1
dispatch_semaphore_wait 信號(hào)量減1,如果信號(hào)量等于0就阻塞等待

NSOperation

NSOperation是基于GCD更高一層的封裝。
一般使用 NSInvocationOperation 或者 NSBlockOperation ,也可以自己繼承實(shí)現(xiàn),需要實(shí)現(xiàn)main函數(shù)。

NSOperationQueue 是執(zhí)行隊(duì)列
添加到主隊(duì)列的都會(huì)在主隊(duì)列中執(zhí)行
添加到其他隊(duì)列的都會(huì)在子線程中執(zhí)行

隊(duì)列最大并發(fā)數(shù)設(shè)置 maxConcurrentOperationCount

函數(shù):
NSOperationQueue的函數(shù):
addOperation:把NSOperation 加到隊(duì)列中
addExecutionBlock: 直接把代碼塊作為任務(wù)加到隊(duì)列中
cancelAllOperations; NSOperationQueue提供的方法,可以取消隊(duì)列的所有操作,所有任務(wù)取消,包括正在執(zhí)行的,還未執(zhí)行的。
setSuspended:(BOOL)b; 可設(shè)置任務(wù)的暫停和恢復(fù),YES代表暫停隊(duì)列,NO代表恢復(fù)隊(duì)列

NSOperation的函數(shù):
cancel; ,可取消單個(gè)操作
.qualityOfService = NSQualityOfServiceBackground;設(shè)置優(yōu)先級(jí)有:非常低,低,通常,高,非常高
[A addDependency:B] A在B執(zhí)行完了過(guò)后開(kāi)始執(zhí)行

https://www.jianshu.com/p/5445411fb53c
NSLock
互斥鎖,底層用pthread_mutex實(shí)現(xiàn)
lock、unlock
trylock:能加鎖返回 YES 并執(zhí)行加鎖操作,相當(dāng)于 lock,反之返回 NO
lockBeforeDate:這個(gè)方法表示會(huì)在傳入的時(shí)間內(nèi)嘗試加鎖,若能加鎖則執(zhí)行加鎖**操作并返回 YES,反之返回 NO

@synchronized
由recursive_mutex(互斥遞歸鎖)實(shí)現(xiàn),最終還是用了pthread_mutex。最大的問(wèn)題就是,效率低,傳入對(duì)象必須等待之前的鎖執(zhí)行完成之后才能執(zhí)行,無(wú)法達(dá)到異步的效果。
NSCondition
條件變量也是互斥鎖,底層是的pthread_cond條件變量和pthread_mutex互斥量的封裝
wait:進(jìn)入等待狀態(tài)
waitUntilDate::讓一個(gè)線程等待一定的時(shí)間
signal:喚醒一個(gè)等待的線程
broadcast:喚醒所有等待的線程

dispatch_semaphore 自旋鎖
dispatch_semaphore_create(1): 傳入值必須 >=0, 若傳入為 0 則阻塞線程并等待timeout,時(shí)間到后會(huì)執(zhí)行其后的語(yǔ)句
dispatch_semaphore_wait(signal, overTime):可以理解為 lock,會(huì)使得 signal 值 -1
dispatch_semaphore_signal(signal):可以理解為 unlock,會(huì)使得 signal 值 +1

NSRecursiveLock
是對(duì)pthread_mutex的封裝
遞歸鎖可以被同一線程多次請(qǐng)求,而不會(huì)引起死鎖。這主要是用在循環(huán)或遞歸操作中。

atomic
自旋鎖

OSSpinLock 自旋鎖

互斥鎖和信號(hào)量的區(qū)別
互斥量用于線程的互斥,信號(hào)線用于線程的同步。
互斥量值只能為0/1,信號(hào)量值可以為非負(fù)整數(shù)。也就是說(shuō),一個(gè)互斥量只能用于一個(gè)資源的互斥訪問(wèn),它不能實(shí)現(xiàn)多個(gè)資源的多線程互斥問(wèn)題。信號(hào)量可以實(shí)現(xiàn)多個(gè)同類資源的多線程互斥和同步。

線程和進(jìn)程

線程和進(jìn)程的區(qū)別
進(jìn)程是資源分配的最小單位,線程是CPU調(diào)度的最小單位
一個(gè)進(jìn)程可以包含多個(gè)線程
不同進(jìn)程間數(shù)據(jù)很難共享
同一進(jìn)程下不同線程間數(shù)據(jù)很易共享
進(jìn)程要比線程消耗更多的計(jì)算機(jī)資源
進(jìn)程間不會(huì)相互影響,一個(gè)線程掛掉將導(dǎo)致整個(gè)進(jìn)程掛掉
進(jìn)程可以拓展到多機(jī),進(jìn)程最多適合多核
進(jìn)程使用的內(nèi)存地址可以上鎖,即一個(gè)線程使用某些共享內(nèi)存時(shí),其他線程必須等它結(jié)束,才能使用這一塊內(nèi)存。

ios進(jìn)程間通信

URL scheme
Keychain 本質(zhì)是數(shù)據(jù)庫(kù),經(jīng)過(guò)加密,為不同app存儲(chǔ)敏感信息
UIPasteBoard 剪切板
socket
APP Groups 同組的不同app,通過(guò)相同組名讀取文件
AirDrop 分享(設(shè)備間信息傳遞)
UIActivityViewController 封裝AirDrop

線程間通信

線程間通信方法包含進(jìn)程間通信方法(如上),因?yàn)閮蓚€(gè)進(jìn)程間通信,其實(shí)就是兩個(gè)線程間在通信。單個(gè)進(jìn)程內(nèi)的線程通信有如下方法。
共享內(nèi)存
共享磁盤文件
NSObject對(duì)象 performSelectorOnMainThread 或者 performSelector: onThread:
GCD
NSOperationQueue

應(yīng)用啟動(dòng)流程

解析Info.plist:加載相關(guān)信息, 簽名驗(yàn)證,

沙箱和進(jìn)程建立

加載動(dòng)態(tài)庫(kù)
dyld(動(dòng)態(tài)鏈接器)會(huì)首先讀取mach-o文件的Header和load commands。接著就知道了這個(gè)可執(zhí)行文件依賴的動(dòng)態(tài)庫(kù),然后根據(jù)遞歸的依賴遞歸加載所有動(dòng)態(tài)庫(kù),同時(shí)緩存到 dyld shared cache 提高加載效率。
Rebase 修正內(nèi)部(指向當(dāng)前mach-o文件)的指針指向(因?yàn)榈刂肥请S機(jī)的,蘋果會(huì)運(yùn)用地址空間布局隨機(jī)化技術(shù)ASLR來(lái)給指針的起始地址一個(gè)隨機(jī)的偏移量,)
Bind 修正外部指針指向

objC的runtime初始化(ObjC setup):ObjC相關(guān)Class的注冊(cè)、category注冊(cè)等。

類的load方法調(diào)用

main函數(shù) UIApplicationMain

app生命周didFinishLaunchWithOptions,applicationDidBecomeActive

vc生命周期

編譯流程

先編譯cocopods里面的所有依賴文件
編譯信息寫入輔助信息,創(chuàng)建編譯后的文件架構(gòu):將項(xiàng)目的文件結(jié)構(gòu)對(duì)應(yīng)表、將要執(zhí)行的腳本、項(xiàng)目依賴庫(kù)的文件結(jié)構(gòu)對(duì)應(yīng)表寫成文件
運(yùn)行預(yù)設(shè)的腳本。如 Cocoapods 會(huì)在 Build Phases 中預(yù)設(shè)一些腳本
編譯 .m 文件,生成可執(zhí)行文件 Mach-O。每次進(jìn)行了 LLVM 的完整流程:前端(詞法分析 - 語(yǔ)法分析 - 生成 IR)、優(yōu)化器(優(yōu)化 IR)、后端(生成匯編 - 鏈接 - 生成可執(zhí)行文件)
鏈接需要的.framework庫(kù)
拷貝資源文件到目標(biāo)包
編譯 xib 文件
鏈接 xib 文件
編譯 Asset 文件。
處理 info.plist
執(zhí)行 CocoaPods 腳本,將在編譯項(xiàng)目前已編譯好的依賴庫(kù)和相關(guān)資源拷貝到包中。
拷貝 Swift 標(biāo)準(zhǔn)庫(kù)
創(chuàng)建 .app 文件并對(duì)其簽名

離屏渲染

iOS 離屏渲染探究

手動(dòng)觸發(fā)離屏渲染
可以通過(guò)設(shè)置layer的shouldRasterize為YES來(lái)觸發(fā)離屏渲染,在某些場(chǎng)景下,打開(kāi) shouldRasterize 可以將一個(gè)layer反復(fù)利用,從而達(dá)到提升效率的優(yōu)勢(shì)。

事件傳遞

- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event {// 1.判斷當(dāng)前控件能否接收事件if (self.userInteractionEnabled == NO || self.hidden == YES || self.alpha <= 0.01) return nil;// 2. 判斷點(diǎn)在不在當(dāng)前控件if ([self pointInside:point withEvent:event] == NO) return nil;// 3.從后往前遍歷自己的子控件NSInteger count = self.subviews.count;for (NSInteger i = count - 1; i >= 0; i--) {UIView *childView = self.subviews[i];// 把當(dāng)前控件上的坐標(biāo)系轉(zhuǎn)換成子控件上的坐標(biāo)系CGPoint childP = [self convertPoint:point toView:childView];UIView *fitView = [childView hitTest:childP withEvent:event];if (fitView) { // 尋找到最合適的viewreturn fitView;}}// 循環(huán)結(jié)束,表示沒(méi)有比自己更合適的viewreturn self; }

推送通知

本地通知

本地通知是在程序中指定某個(gè)時(shí)間,或者在多少時(shí)間倒計(jì)時(shí),或者在特定條件之后,出現(xiàn)在設(shè)備的狀態(tài)欄消息中的功能。
本地通知使用:在AppDelegate.m中application didFinishLauch方法中對(duì)通知方法執(zhí)行注冊(cè);在AppDelegate的didRegisterUserNotificationSettings回調(diào)里知道注冊(cè)是否成功;在 didReceiveLocalNotification中響應(yīng)通知點(diǎn)擊事件;發(fā)本地通知用UILocalNotification ,可配置標(biāo)題,內(nèi)容,聲音,程序圖標(biāo)通知數(shù)目,觸發(fā)事件等信息。
移除全部本地通知:

[[UIApplication sharedApplication] removeAllNoticfications];

取所有通知:

[UIApplication sharedApplication].scheduledLocalNotifications;

根據(jù)移除指定通知:

[[UIApplication sharedApplication] cancelLocalNotification:notification]

遠(yuǎn)程通知

每臺(tái)設(shè)備只要聯(lián)網(wǎng)就會(huì)和蘋果的 APNs服務(wù)器建立一個(gè) 長(zhǎng)連接,這樣只要通過(guò)蘋果的APNs服務(wù)器,我們自己的服務(wù)器就可以間接的和設(shè)備保持連接了.

通知注冊(cè)跟本地通知一樣。
如果用戶同意,蘋果會(huì)根據(jù)應(yīng)用的 bundleID 和 手機(jī)UDID 生成 deviceToken,然后調(diào)用 -application: didRegisterForRemoteNotificationsWithDeviceToken : 方法返回 devicetoken。

// 用戶同意后,會(huì)調(diào)用此程序,獲取系統(tǒng)的deviceToken,應(yīng)把deviceToken傳給服務(wù)器保存,此函數(shù)會(huì)在程序每次啟動(dòng)時(shí)調(diào)用(前提是用戶允許通知) //會(huì)自動(dòng)執(zhí)行下面的方法 - (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {NSLog(@"log--didRegisterForRemoteNotificaionWith:%@",deviceToken); }

相應(yīng)遠(yuǎn)程推送函數(shù)是 didReceiveRemoteNotification

應(yīng)用程序5個(gè)狀態(tài)

停止運(yùn)行-應(yīng)用程序已經(jīng)終止,或者還未啟動(dòng)。
不活動(dòng)-應(yīng)用程序處于前臺(tái)但不再接收事件(例如,用戶在app處于活動(dòng)時(shí)鎖住了設(shè)備)。
活動(dòng)-app處于“使用中”的狀態(tài)。
后臺(tái)-app不再屏幕上顯示,但它仍然執(zhí)行代碼。
掛起-app仍然駐留內(nèi)存但不再執(zhí)行代碼。

按下Home鍵時(shí),app從活動(dòng)狀態(tài)轉(zhuǎn)入后臺(tái),絕大部分app通常在幾秒內(nèi)就從后臺(tái)變成了掛起。

在內(nèi)存吃緊的時(shí)候,iphone會(huì)首先關(guān)閉那些掛起的app

后臺(tái)運(yùn)行方案

1、Background Audio,這是后臺(tái)的音頻,這個(gè)很早之前便有,也是iOS設(shè)備中用得最多的后臺(tái)應(yīng)用,調(diào)用這個(gè)接口可以實(shí)現(xiàn)后臺(tái)的音樂(lè)播放。
2、Location Services,這是后臺(tái)的定位,系統(tǒng)會(huì)擁有統(tǒng)一頁(yè)面進(jìn)行管理。
3、VoIP,后臺(tái)語(yǔ)音服務(wù),類似Skype通話應(yīng)用需要調(diào)用,可進(jìn)行后臺(tái)的語(yǔ)音通話。
4、Newsstand,報(bào)刊雜志后臺(tái)自動(dòng)下載更新,其能夠自動(dòng)實(shí)時(shí)更新。
5、Background Task Completion,這個(gè)接口早在iOS 4時(shí)候便擁有,其可以供任意類型的APP使用,不過(guò)在舊系統(tǒng)中,這個(gè)接口的后臺(tái)限制運(yùn)行時(shí)間僅為10分鐘,意味著當(dāng)應(yīng)用退至后臺(tái),其后臺(tái)運(yùn)行僅能持續(xù)10分鐘便會(huì)轉(zhuǎn)至休眠狀態(tài)。iOS 7中對(duì)這個(gè)接口作出了改變,原來(lái)的為連續(xù)10分鐘,即不論你這10分鐘內(nèi)用戶是否關(guān)閉屏幕進(jìn)入休眠狀態(tài),應(yīng)用仍然會(huì)在后臺(tái)等待10分鐘完結(jié)后推出,而新的改進(jìn)為假如遇到關(guān)閉屏幕休眠的情況,這后臺(tái)運(yùn)行的10分鐘便會(huì)跟隨一同休眠,剩余的后臺(tái)時(shí)間將會(huì)留待用戶再一次喚醒設(shè)備才計(jì)算。這樣后臺(tái)運(yùn)行的時(shí)間仍然為10分鐘,但并不連續(xù),這樣做的優(yōu)點(diǎn)為省電。
如現(xiàn)在有一些詞典應(yīng)用帶有后臺(tái)復(fù)制選詞功能,實(shí)際上其是利用了這個(gè)接口,如果用戶開(kāi)啟詞典后并推出,即使屏幕關(guān)閉,但詞典仍然在后臺(tái)運(yùn)行,電量消耗還是比較大的,在iOS 7上,這個(gè)問(wèn)題可以得到解決。
6、 Remote Notification,這是本次較大的一個(gè)改進(jìn)接口,以往聊天類應(yīng)用接受推送后點(diǎn)進(jìn)去需要再收一次信息,這情況在QQ、微信等應(yīng)用上最為明顯。不過(guò)擁有了這個(gè)接口后,這情況將不復(fù)存在,以后推送將能夠直接啟動(dòng)后臺(tái)任務(wù)。值得注意的是remote notification支持silent notification(靜默推送),這樣dropbox這類同步應(yīng)用可以在后臺(tái)以最節(jié)能的模式實(shí)時(shí)靜默同步了,類似布卡漫畫這種也可以推送正在追的漫畫的新章節(jié)并在后臺(tái)靜默下載,待到下載好再給用戶發(fā)送一個(gè)本地推送,用戶點(diǎn)開(kāi)即看無(wú)需再聯(lián)網(wǎng)。
7、Background Transfer Service,后臺(tái)上傳下載。iOS最接近傳統(tǒng)多任務(wù)的后臺(tái)接口,可供任意類型的app調(diào)用,無(wú)時(shí)間限制。應(yīng)用場(chǎng)景包括后臺(tái)上傳和下載數(shù)據(jù),這使得游戲后臺(tái)更新數(shù)據(jù)包,后臺(tái)上傳視頻等等都成為可能,但是正如其名字,它只能用于處理上傳下載這種傳輸類的任務(wù),類似后臺(tái)剪切板監(jiān)控這種它就無(wú)能為力了。

自動(dòng)布局框架Masonry

https://segmentfault.com/a/1190000019569119
Masonry是一個(gè)對(duì)系統(tǒng)NSLayoutConstraint進(jìn)行封裝的第三方自動(dòng)布局框架,采用鏈?zhǔn)骄幊痰姆绞教峁┙o開(kāi)發(fā)者API。

CoreData

https://juejin.cn/post/6844903805369188366
1.簡(jiǎn)述
CoreData是數(shù)據(jù)存儲(chǔ)框架,采用了一種對(duì)象關(guān)系映射的存儲(chǔ)關(guān)系。
CoreData一個(gè)比較大的優(yōu)勢(shì)在于在使用CoreData過(guò)程中不需要我們編寫SQL語(yǔ)句,也就是將OC對(duì)象存儲(chǔ)于數(shù)據(jù)庫(kù),也可以將數(shù)據(jù)庫(kù)數(shù)據(jù)轉(zhuǎn)為OC對(duì)象(數(shù)據(jù)庫(kù)數(shù)據(jù)與OC對(duì)象相互轉(zhuǎn)換)。
2.CoreData幾個(gè)類
(1)NSManagedObjectContext
托管對(duì)象上下文,數(shù)據(jù)庫(kù)的大多數(shù)操作是在這個(gè)類操作
(2)NSManagedObjectModel
托管對(duì)象模型,其中一個(gè)托管對(duì)象模型關(guān)聯(lián)到一個(gè)模型文件,里面存儲(chǔ)著數(shù)據(jù)庫(kù)的數(shù)據(jù)結(jié)構(gòu)。
(3)NSPersistentStoreCoordinator
持久化存儲(chǔ)協(xié)調(diào)器,主要負(fù)責(zé)協(xié)調(diào)上下文玉存儲(chǔ)的區(qū)域的關(guān)系。
(4)NSManagedObject
托管對(duì)象類,其中CoreData里面的托管對(duì)象都會(huì)繼承此類。

FMDB

內(nèi)部封裝c語(yǔ)言 通過(guò) sqlite3系列函數(shù)操作數(shù)據(jù)庫(kù)。

有三個(gè)主要的類:
1.FMDatabase – 表示一個(gè)單獨(dú)的SQLite數(shù)據(jù)庫(kù)。 用來(lái)執(zhí)行SQLite的命令。
2.FMResultSet – 表示FMDatabase執(zhí)行查詢后結(jié)果集
3.FMDatabaseQueue – 如果你想在多線程中執(zhí)行多個(gè)查詢或更新,你應(yīng)該使用該類。這是線程安全的。

創(chuàng)建FMDatabase對(duì)象時(shí)參數(shù)為SQLite數(shù)據(jù)庫(kù)文件路徑。該路徑可以是以下三種之一:
1…文件路徑。該文件路徑無(wú)需真實(shí)存,如果不存在會(huì)自動(dòng)創(chuàng)建。
2…空字符串(@”")。表示會(huì)在臨時(shí)目錄創(chuàng)建一個(gè)空的數(shù)據(jù)庫(kù),當(dāng)FMDatabase 鏈接關(guān)閉時(shí),文件也被刪除。
3.NULL. 將創(chuàng)建一個(gè)內(nèi)在數(shù)據(jù)庫(kù)。同樣的,當(dāng)FMDatabase連接關(guān)閉時(shí),數(shù)據(jù)會(huì)被銷毀。

打開(kāi)數(shù)據(jù)庫(kù)
在和數(shù)據(jù)庫(kù)交互 之前,數(shù)據(jù)庫(kù)必須是打開(kāi)的。如果資源或權(quán)限不足無(wú)法打開(kāi)或創(chuàng)建數(shù)據(jù)庫(kù),都會(huì)導(dǎo)致打開(kāi)失敗

常用命令
SELECT、CREATE, UPDATE, INSERT,ALTER,COMMIT, BEGIN, DETACH, DELETE, DROP, END, EXPLAIN, VACUUM, and REPLACE (等)
只要不是以SELECT開(kāi)頭的命令都是UPDATE命令。執(zhí)行更新返回一個(gè)BOOL值。YES表示執(zhí)行成功,否則表示有那些錯(cuò)誤 。你可以調(diào)用 -lastErrorMessage 和 -lastErrorCode方法來(lái)得到更多信息。

執(zhí)行查詢
SELECT命令就是查詢,執(zhí)行查詢的方法是以 -excuteQuery開(kāi)頭的。執(zhí)行查詢時(shí),如果成功返回FMResultSet對(duì)象, 錯(cuò)誤返回nil. 與執(zhí)行更新相當(dāng),支持使用 NSError**參數(shù)。同時(shí),你也可以使用 -lastErrorCode和-lastErrorMessage獲知錯(cuò)誤信息。

添加表字段的sql語(yǔ)句怎么寫 1、判斷表是否打開(kāi) 2、判斷表中是否存在當(dāng)前的一個(gè)或者多個(gè)字段 3、如果不存在添加字段

性能優(yōu)化

應(yīng)用啟動(dòng)優(yōu)化:合并動(dòng)態(tài)庫(kù);刪除無(wú)用類;刪除無(wú)用靜態(tài)變量;將不必須在+load方法中做的事情延遲到+initialize中;盡量使用純代碼編寫,減少xib的使用;耗時(shí)操作異步執(zhí)行;不用AutoLayout;優(yōu)化代碼降低包大小

懶加載和復(fù)用對(duì)象

是否透明屬性opaque YES表示不透明。

列表性能提升: reuseIdentifier避免每次渲染cell都重建;盡量非透明opaque 為YES;緩存行高;耗時(shí)如網(wǎng)絡(luò)請(qǐng)求,異步加載緩存結(jié)果;Shadow Path替代直接用陰影;減少層次結(jié)構(gòu)。

不要阻塞主線程,耗時(shí)操作異步到子線程

正確選擇Collection:Arrays: 有序的一組值。使用index來(lái)lookup很快,使用value lookup很慢, 插入/刪除很慢;Dictionaries: 存儲(chǔ)鍵值對(duì)。 用鍵來(lái)查找比較快;Sets: 無(wú)序的一組值。用值來(lái)查找很快,插入/刪除很快。

使用緩存,比如NSCache,緩存文件等

重用大開(kāi)銷對(duì)象,恰當(dāng)使用單例模式

webview重用

數(shù)據(jù)存儲(chǔ)

使用NSUserDefaults 存沙盒文件,小文件
plist 文件儲(chǔ)存(xcode配置里面就有這個(gè)文件)
歸檔保存,將字典數(shù)組或者實(shí)現(xiàn)了(NSCoding)協(xié)議的對(duì)象轉(zhuǎn)換成字節(jié)流NSData,再寫入文件。使用NSKeyedArchiver和NSKeyedUnarchiver
SQLite數(shù)據(jù)庫(kù) (開(kāi)源庫(kù) FMDB、Realm等)
使用 Core Data

autoreleasepool

自動(dòng)釋放池塊提供了一種機(jī)制,您可以通過(guò)該機(jī)制放棄對(duì)象的所有權(quán),但避免立即釋放它的可能性(例如當(dāng)您從方法返回對(duì)象時(shí))
Cocoa 總是希望代碼在自動(dòng)釋放池塊中執(zhí)行,否則自動(dòng)釋放的對(duì)象不會(huì)被釋放并且您的應(yīng)用程序會(huì)泄漏內(nèi)存。

使用自己的自動(dòng)釋放池塊:

1.如果您正在編寫不基于 UI 框架的程序,例如命令行工具。
2.如果您編寫一個(gè)創(chuàng)建許多臨時(shí)對(duì)象的循環(huán)。
您可以在循環(huán)內(nèi)使用自動(dòng)釋放池塊在下一次迭代之前處理這些對(duì)象。在循環(huán)中使用自動(dòng)釋放池塊有助于減少應(yīng)用程序的最大內(nèi)存占用。
3.如果你產(chǎn)生一個(gè)輔助線程。
您必須在線程開(kāi)始執(zhí)行后立即創(chuàng)建自己的自動(dòng)釋放池塊;否則,您的應(yīng)用程序?qū)⑿孤?duì)象。(Cocoa 應(yīng)用程序中的每個(gè)線程都維護(hù)自己的自動(dòng)釋放池塊堆棧。如果您正在編寫僅 Foundation 程序或分離線程,則需要?jiǎng)?chuàng)建自己的自動(dòng)釋放池塊。)

main函數(shù)的autoreleasepool :autorelease對(duì)象的釋放時(shí)機(jī)是由RunLoop控制的,會(huì)在當(dāng)前RunLoop每次循環(huán)結(jié)束時(shí)釋放。

iOS 自動(dòng)釋放池ARC與MRC

內(nèi)存分布

內(nèi)存泄漏

內(nèi)存泄漏的原因
在用C/C++時(shí),創(chuàng)建對(duì)象后未銷毀,比如調(diào)用malloc后不free、調(diào)用new后不delete;
調(diào)用CoreFoundation里面的C方法后創(chuàng)建對(duì)對(duì)象后不釋放。比如調(diào)用CGImageCreate不調(diào)用CGImageRelease;
循環(huán)引用。
NSTimer
有些注冊(cè)未解開(kāi)注冊(cè)
子線程未關(guān)閉runlooper或者有死循環(huán),死鎖等讓該關(guān)閉的線程關(guān)閉不了

CFRunLoopStop([NSRunLoop currentRunLoop].getCFRunLoop);

檢測(cè)循環(huán)引用
靜態(tài)代碼分析。 通過(guò)Xcode->Product->Anaylze分析結(jié)果來(lái)處理;
動(dòng)態(tài)分析。用MLeaksFinder(只能檢測(cè)OC泄露)或者Instrument或者OOMDetector(能檢測(cè)OC與C++泄露)。

其他

對(duì)于視圖或者圖層來(lái)說(shuō),frame是一個(gè)虛擬屬性,是根據(jù)bounds,position和transform計(jì)算而來(lái),所以當(dāng)其中任何一個(gè)值發(fā)生改變,frame都會(huì)變化。相反,改變frame的值同樣會(huì)影響到他們當(dāng)中的值。
https://zsisme.gitbooks.io/ios-/content/chapter3/layout.html

為什么圓角和透明觸發(fā)離屏渲染:

當(dāng)App需要進(jìn)行額外的渲染和合并時(shí),例如按鈕設(shè)置圓角,我們是需要對(duì)UIButton這個(gè)控件中的所有圖層都進(jìn)行圓角+裁剪,然后再將合并后的結(jié)果存入幀緩存區(qū),再?gòu)膸彺嬷腥〕鼋挥善聊伙@示,這時(shí),在正常的渲染流程中,我們是無(wú)法做到對(duì)所有圖層進(jìn)行圓角裁剪的,因?yàn)樗怯靡粋€(gè)丟一個(gè)。所以我們需要提前將處理好的結(jié)果放入離屏緩沖區(qū),最后將幾個(gè)圖層進(jìn)行疊加合并,存放到站緩沖區(qū),最后屏幕上就是我們想實(shí)現(xiàn)的效果。
super class是怎么調(diào)用的
super 不同于 self,它不是個(gè)對(duì)象,而是個(gè) flag
用于 objc_msgSendSuper 的結(jié)構(gòu)體 objc_super 是編譯時(shí)確定的,里面包含了當(dāng)前類的父類信息
[super someMethod] 會(huì)去利用結(jié)構(gòu)體中的父類信息,從這個(gè)父類開(kāi)始順著繼承鏈向上查找,直到找到第一個(gè)實(shí)現(xiàn) - someMethod 這個(gè)方法的類
找到方法后,利用結(jié)構(gòu)體中的 receiver,也就是一開(kāi)始觸發(fā)這個(gè)方法調(diào)用的實(shí)例,調(diào)用這個(gè)方法實(shí)現(xiàn)。
所以說(shuō),[super class] 經(jīng)過(guò)這么一大圈的轉(zhuǎn)換,實(shí)際上變成了 [self class] 了。

weak的實(shí)現(xiàn)
Runtime維護(hù)了一個(gè)weak表,用于存儲(chǔ)指向某個(gè)對(duì)象的所有weak指針。

1、初始化時(shí):runtime初始化一個(gè)新的weak指針指向?qū)ο蟮牡刂贰?br /> 2、添加引用時(shí):更新指針指向,創(chuàng)建對(duì)應(yīng)的弱引用表。
3、釋放時(shí),首先根據(jù)對(duì)象地址獲取所有weak指針地址的數(shù)組,然后遍歷這個(gè)數(shù)組把其中的數(shù)據(jù)設(shè)為nil,最后把這個(gè)entry從weak表中刪除。
靜態(tài)鏈接
靜態(tài)鏈接:每一個(gè).c的代碼源文件可以被理解成一個(gè)模塊,每一個(gè)模塊獨(dú)立編譯,再把所有編譯完的文件鏈接起來(lái),這個(gè)過(guò)程就是我們所說(shuō)的靜態(tài)鏈接。 靜態(tài)庫(kù): 例如.a和.framework。靜態(tài)庫(kù)鏈接時(shí),會(huì)被完整地復(fù)制到可執(zhí)行文件中,被使用到了多次,就會(huì)復(fù)制多份,這樣就有多份拷貝很冗余,鏈接時(shí)間長(zhǎng)了,還浪費(fèi)了內(nèi)存空間。

靜態(tài)鏈接流程:
1.空間與地址分配
每個(gè)單獨(dú)的文件編譯后都會(huì)生成一個(gè)符號(hào)表,靜態(tài)鏈接后這些表會(huì)被合并成一個(gè)全局符號(hào)表。合并的規(guī)則是相似段合并、數(shù)據(jù)段與數(shù)據(jù)段合并、代碼段與代碼段合并。
合并后每一個(gè)符號(hào)的的地址被確定,并寫入全局符號(hào)表中。
2.重定位符號(hào)
經(jīng)過(guò)空間與地址分配之后代碼段中指令用到的符號(hào)地址還沒(méi)有更新,想要確定符號(hào)的地址需要用到重定位表。編譯后.o文件中需要重定位的符號(hào)的相關(guān)信息會(huì)存入重定位表中。

動(dòng)態(tài)鏈接
程序編譯時(shí)并不會(huì)鏈接到目標(biāo)程序中,目標(biāo)程序只會(huì)存儲(chǔ)指向動(dòng)態(tài)庫(kù)的引用,在程序運(yùn)行時(shí)才被載入。:
共享內(nèi)存,節(jié)省資源,同一份庫(kù)可以被多個(gè)程序使用;減少打包之后的 app 的大小;

CoreGraphics,和CoreAnimation

為什么必須在主線程操作UI
UIKit并不是一個(gè)線程安全的類,UI操作涉及到渲染訪問(wèn)各種View對(duì)象的屬性,如果異步操作下會(huì)存在讀寫問(wèn)題,
而為其加鎖則會(huì)耗費(fèi)大量資源并拖慢運(yùn)行速度。
另一方面因?yàn)檎麄€(gè)程序的起點(diǎn)UIApplication是在主線程進(jìn)行初始化,所有的用戶事件都是在主線程上進(jìn)行傳遞(如點(diǎn)擊、拖動(dòng)),所以view只能在主線程上才能對(duì)事件進(jìn)行響應(yīng)。
而在渲染方面由于圖像的渲染需要以60幀的刷新率在屏幕上 同時(shí) 更新,在非主線程異步化的情況下無(wú)法確定這個(gè)處理過(guò)程能夠?qū)崿F(xiàn)同步更新。

省電
測(cè)試工具:xcode自帶工具:Energy Impact。可以圖形直觀展示CPU,GPU,定位,網(wǎng)絡(luò),后臺(tái),前臺(tái)等耗電占比。

省電的方案:
識(shí)別:想清楚你需要app在特定時(shí)刻需要完成哪些工作,如果是不必要的工作,考慮延后執(zhí)行或者省去。
優(yōu)化:優(yōu)化app的功能實(shí)現(xiàn),盡可能以更有效率的方式去完成功能。
合并:不需要立刻獲取,可以延后合并執(zhí)行,比如合并網(wǎng)絡(luò)
減少:在滿足需求的基礎(chǔ)上,盡量減少做重復(fù)工作的頻率。

耗電大戶:
網(wǎng)絡(luò):應(yīng)減少數(shù)據(jù)傳輸,合并網(wǎng)絡(luò)請(qǐng)求,適當(dāng)?shù)木W(wǎng)絡(luò)延時(shí)等
定位:精度越高,定位時(shí)間越長(zhǎng),越耗電
CPU:
GPU:UI不可見(jiàn)時(shí),應(yīng)該避免更新其內(nèi)容
傳感器和藍(lán)牙: 傳感器數(shù)據(jù)應(yīng)按需獲取,用完即停;藍(lán)牙應(yīng)該盡量分批、減少數(shù)據(jù)輪詢等操作

幀率FPS
代碼中檢測(cè):CADisplayLink
Xcode檢測(cè)工具:Core Animation

主線程卡頓監(jiān)測(cè): 通過(guò)開(kāi)辟一個(gè)子線程來(lái)監(jiān)測(cè)主線程的RunLoop,當(dāng)兩個(gè)狀態(tài)區(qū)域的耗時(shí)大于設(shè)定的閾值時(shí),即為一次卡頓。

判斷是否實(shí)現(xiàn)協(xié)議
conformsToProtocol

判斷有沒(méi)有實(shí)現(xiàn)dalegate的某個(gè)方法
respondsToSelector

通知
postNotification是同步方法。當(dāng)調(diào)用addObserver方法監(jiān)聽(tīng)通知,然后調(diào)用postNotification拋通知,postNotification會(huì)在當(dāng)前線程遍歷所有的觀察者,然后依次調(diào)用觀察者的監(jiān)聽(tīng)方法,調(diào)用完成后才會(huì)去執(zhí)行postNotification后面的代碼。

實(shí)現(xiàn)異步的通知使用:addObserverForName:object:queue:usingBlock來(lái)實(shí)現(xiàn)異步通知。

監(jiān)測(cè)野指針
xcode Run配置打開(kāi) 內(nèi)存涂鴉(Malloc Scribble),將釋放的內(nèi)存進(jìn)行涂鴉成固定值,導(dǎo)致使用野指針的時(shí)候一定crash
xcode Run配置打開(kāi) 僵尸對(duì)象,僵尸對(duì)象替換對(duì)象的dealloc方法,如果調(diào)用已經(jīng)dealloc過(guò)后的對(duì)象拋出異常

iOS常見(jiàn)崩潰以及總結(jié)
常見(jiàn)崩潰
非法參數(shù)
數(shù)組越界
KVO 重復(fù)一處觀察者,沒(méi)有實(shí)現(xiàn)observeValueForKeyPath:
kvc
對(duì)象接收到未知的消息
signal 信號(hào)量崩潰

捕獲crash
捕獲oc崩潰:NSSetUncaughtExceptionHandler 。如下

NSSetUncaughtExceptionHandler(&UncaughtExceptionHandler);

注冊(cè)SIGABRT, SIGBUS, SIGSEGV等信號(hào)發(fā)生時(shí)的處理函數(shù),處理Signal層面的crash。
例如如下

signal(SIGHUP, SignalExceptionHandler);signal(SIGINT, SignalExceptionHandler);signal(SIGQUIT, SignalExceptionHandler);

crash保護(hù)
hook相關(guān)的方法,用trycatch保護(hù),增加保護(hù)機(jī)制。

調(diào)用方法前,判斷 respondsToSelector

崩潰分析方法
用xcode查看崩潰
xcode->Window->Organizer->Crashes

在Archive的時(shí)候會(huì)生成.xcarchive文件,然后顯示包內(nèi)容就能夠在里面找到.dsYM文件。用友盟.dsYM分析,選中UUID,輸入崩潰地址。

** 路由方案 **
url 路由

target-action方案:
給組件封裝一層target對(duì)象來(lái)對(duì)外提供服務(wù),然后調(diào)用者通過(guò)依賴中間件來(lái)使用服務(wù);其中,中間件是通過(guò)runtime來(lái)調(diào)用組件的服務(wù),是真正意義上的解耦,也是該方案最核心的地方。不會(huì)對(duì)原來(lái)組件造成入侵;然后,通過(guò)實(shí)現(xiàn)中間件的category來(lái)提供服務(wù)給調(diào)用者,這樣使用者只需要依賴中間件,而組件則不需要依賴中間件。每個(gè)category對(duì)應(yīng)一個(gè)Target,Categroy中的方法對(duì)應(yīng)Action場(chǎng)景

protocol-class
就是通過(guò)protocol定義服務(wù)接口,組件通過(guò)實(shí)現(xiàn)該接口來(lái)提供接口定義的服務(wù),具體實(shí)現(xiàn)就是把protocol和class做一個(gè)映射,同時(shí)在內(nèi)存中保存一張映射表,使用的時(shí)候,就通過(guò)protocol找到對(duì)應(yīng)的class來(lái)獲取需要的服務(wù)。

ios的導(dǎo)航設(shè)計(jì)模式
平鋪導(dǎo)航( UITabbarController )
標(biāo)簽導(dǎo)航( UINavigationController )
樹形導(dǎo)航(UIPageViewController)

屬性修飾符
可以用strong和retain修飾同一個(gè)屬性
但是不能用strong和copy修飾同一屬性,運(yùn)行會(huì)報(bào)錯(cuò)

viewDidUnload在這里插入代碼片
是ios6后舍棄的 vc銷毀時(shí)回調(diào)的生命周期

WKWebview ios和js通信
ios調(diào)用js,在ios中:

[self.webView evaluateJavaScript:@"document.title" completionHandler:^(id _Nullable title, NSError * _Nullable error) {NSLog(@"Hello, %@", title); }];

js調(diào)用ios
在ios中注冊(cè)回調(diào)

KWebViewConfiguration *config = [[WKWebViewConfiguration alloc] init]; config.userContentController = [[WKUserContentController alloc] init]; //聲明 hello message handler 協(xié)議 [config.userContentController addScriptMessageHandler:self name:@"hello"]; //定義 Message Handler 處理方法 - (void)userContentController:(WKUserContentController *)userContentController{}

在js中調(diào)用:

window.webkit.messageHandlers.hello.postMessage();

真機(jī)調(diào)試前的準(zhǔn)備

創(chuàng)建登錄開(kāi)發(fā)者賬號(hào)
在本地用鑰匙串創(chuàng)建csr文件
進(jìn)入證書管理頁(yè)面,創(chuàng)建證書,上傳csr文件,生成cer證書,下載這個(gè)證書
雙擊下載證書,安裝到電腦的鑰匙串
創(chuàng)建appid
添加允許調(diào)試的設(shè)備的UDID
創(chuàng)建PP文件:選擇真機(jī)調(diào)試配置文件,填入appid,真機(jī)調(diào)試證書,最后生成并下載mobileprovision文件
雙擊pp文件,安裝到xcode上
xcode中Bundle identifier設(shè)置成appid,配置選擇pp文件,配置cer證書

總結(jié)

以上是生活随笔為你收集整理的iOS面试准备 - ios篇的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

欧美视频99| 成人在线播放av | 亚洲精品ww| 色婷婷综合久久久中文字幕 | 中文字幕在线观看免费 | 日韩精品免费一区二区 | 中字幕视频在线永久在线观看免费 | 中日韩在线视频 | 亚洲春色奇米影视 | 亚洲传媒在线 | 五月婷婷激情五月 | 在线观看一区视频 | 黄色小说网站在线 | 久久国产经典视频 | 久热色超碰 | 超碰在线个人 | 午夜精品一区二区三区在线视频 | 欧美大片大全 | 亚洲男男gaygayxxxgv | 69av网| 日本三级国产 | 免费观看福利视频 | 国产在线观看一区 | 亚洲欧美成人 | 婷婷激情站 | 在线成人免费电影 | 色偷偷av男人天堂 | 久久天天躁夜夜躁狠狠躁2022 | 国产一区二区播放 | 久久人人97超碰国产公开结果 | 一个色综合网站 | 一区二区三区免费在线观看 | 久久精品99国产精品亚洲最刺激 | 黄色一级网 | 射射射综合网 | 久久成人综合 | 碰超在线观看 | 久久天天综合网 | 国产精品毛片网 | 欧美另类v | 日韩免费不卡视频 | 久久人视频 | 亚州五月| 日本三级不卡视频 | 国产一区二区在线免费观看 | 成人在线免费看视频 | 国产精品国产三级在线专区 | 狂野欧美激情性xxxx | 日韩av专区| 婷婷色在线 | 午夜精品视频免费在线观看 | 成人在线免费观看网站 | 探花国产在线 | 国产a精品 | 亚洲成人国产 | 亚洲精品网站在线 | 久草网站 | 黄色av成人在线观看 | wwwav视频 | 亚洲精品www. | 青青河边草免费 | 97视频在线免费 | 亚洲人天堂| 91精品国产一区二区在线观看 | 中文字幕一区二区三区在线视频 | 日韩在线看片 | 久久国产精品99精国产 | 国产91在线观看 | 免费看片色 | 欧美黄在线 | 香蕉网站在线观看 | 天天爽天天爽夜夜爽 | 91成人小视频| 黄色软件在线观看免费 | 日本h视频在线观看 | 久久久官网 | 蜜臀aⅴ国产精品久久久国产 | 超碰公开在线 | 免费在线播放视频 | 日韩在线视频免费看 | 国产黄色一级大片 | 9热精品| 久久成人国产精品入口 | 亚洲伊人色 | 国产精品白浆视频 | 99久精品 | 三级小视频在线观看 | 激情婷婷在线 | 久久这里只有精品1 | 91人网站| 天天操天天能 | 99视频精品全部免费 在线 | 一区二区不卡高清 | 麻豆视频免费在线播放 | 中文字幕 二区 | 日韩久久久久 | 中文字幕三区 | 国产精品久99 | 久久国产一区二区三区 | 国产一区自拍视频 | 夜色成人av| 91精品视频一区 | 狠狠色噜噜狠狠狠 | 国偷自产中文字幕亚洲手机在线 | 免费成人av在线看 | 不卡的av电影在线观看 | 日韩精品在线观看视频 | www.久热| 天天操夜 | www.夜色.com | 丁香激情五月 | 91精品国产一区 | 国产精品久久久久9999吃药 | 九九九九免费视频 | 99久久这里只有精品 | 日韩三级av | 欧美日韩中文字幕综合视频 | 国产精品一区久久久久 | 久久激情视频网 | 免费观看国产成人 | 91免费在线看片 | 在线视频99 | 天天操夜夜操夜夜操 | 草久在线 | 麻豆91精品| 日韩av成人免费看 | 天天操夜操 | 亚洲精品视频在线观看免费视频 | 天天操天天干天天爱 | 中文字幕a∨在线乱码免费看 | 五月天天色 | 四虎成人精品永久免费av | 欧美一区二区精美视频 | 国产高清区| 激情图片区 | 天堂网中文在线 | 欧美日韩国产精品久久 | 在线观看av免费观看 | 久久久久国产精品视频 | 美女免费电影 | 黄免费网站 | 久久不卡日韩美女 | 日韩a在线 | 日韩高清激情 | 国产精品theporn | 麻豆视频在线播放 | 又色又爽又黄高潮的免费视频 | 狠狠干在线 | 在线观看黄色 | 黄在线 | 亚洲视频在线免费看 | 五月天久久激情 | 日韩欧美一级二级 | 最近中文字幕高清字幕在线视频 | 99精品国产一区二区 | 中文字幕在线观看亚洲 | 国产精品久久99精品毛片三a | 欧美视频日韩视频 | 日韩专区在线播放 | 日韩欧美在线免费 | 国产精品永久免费视频 | 久久久一本精品99久久精品 | av免费电影在线观看 | 久久视奸 | 黄色免费电影网站 | 久久婷婷一区二区三区 | 国产成人精品久久 | 探花视频在线观看+在线播放 | 超碰在线人人 | 黄色网址国产 | 亚洲精品字幕在线 | 国产精品成人品 | 中文字幕在线视频第一页 | 成人黄大片视频在线观看 | 欧美日韩一区二区久久 | 久久99在线 | 国产麻豆精品传媒av国产下载 | 欧美日韩性 | 91精品区 | 国产成人精品一区二区在线 | 玖玖999| 免费看片亚洲 | 综合伊人久久 | 在线观看免费版高清版 | 国产精品久久久久久久久久久久午夜 | 一区二区三区四区不卡 | www最近高清中文国语在线观看 | 免费看污黄网站 | 一区二区网 | 久久视频这里只有精品 | 91福利视频久久久久 | 国内精品久久久久久 | 免费网站看v片在线a | 日本在线观看中文字幕无线观看 | 99这里只有精品视频 | 日日夜夜精品免费视频 | 国产精彩视频一区二区 | 色九九视频 | 久久久久久亚洲精品 | 在线日韩一区 | 亚洲日本成人网 | 手机在线小视频 | 正在播放国产一区 | 日本精品一区二区 | 国产精品都在这里 | 欧美日韩另类视频 | 国产日韩视频在线 | 国产午夜精品一区二区三区在线观看 | 伊人影院在线观看 | 新版资源中文在线观看 | 亚洲专区在线 | 黄色特级毛片 | 婷婷丁香在线 | 久久国产麻豆 | 日韩中文在线电影 | 香蕉影院在线观看 | 国产涩涩网站 | 欧美一级片免费在线观看 | ,午夜性刺激免费看视频 | 国产精品永久免费在线 | 天天插天天爱 | 国产精品1区 | 五月开心六月伊人色婷婷 | 久久免费视频网 | 国产高清免费在线观看 | 亚洲欧美日韩国产一区二区 | 中文字幕 欧美性 | 色婷婷啪啪免费在线电影观看 | 成人亚洲免费 | 狠狠色噜噜狠狠 | 欧美一区二区三区免费看 | 国产一区二区不卡视频 | 国产精品成人免费一区久久羞羞 | 成人一区二区三区在线 | 国产视频第二页 | 最近乱久中文字幕 | 亚洲aⅴ在线观看 | 天天插狠狠干 | 亚洲免费在线观看视频 | 五月天六月婷 | 午夜精品久久久久久久爽 | 香蕉视频免费在线播放 | 亚洲3级| 日韩综合一区二区 | 久久麻豆精品 | 欧美久草视频 | 日日干美女 | 五月天综合激情 | 国产精品久久久久久久久久久免费看 | 干干操操 | 国产精品成人免费一区久久羞羞 | 青草视频在线看 | 欧美激情视频一区二区三区免费 | 不卡电影一区二区三区 | 精品亚洲免费视频 | 美女在线免费观看视频 | 毛片1000部免费看 | 激情视频区 | 91精品国产高清自在线观看 | 免费看国产a| 91麻豆看国产在线紧急地址 | 婷婷午夜天| 天天干天天操天天入 | 视频在线观看一区 | av导航福利| 成人免费观看a | 一区二区三区在线观看中文字幕 | 日韩网站中文字幕 | 最新影院 | 91精彩视频在线观看 | 在线免费亚洲 | 国产精品一区二区在线观看 | 色婷婷国产精品一区在线观看 | 欧美日韩视频一区二区三区 | 97成人在线 | 国内精品视频免费 | 国产精品视频久久久 | 色夜视频 | 日韩av线观看 | 午夜精品一区二区三区在线播放 | 国产精品自拍在线 | 国产精品久久一区二区无卡 | 天天av在线播放 | 日本99精品| 碰天天操天天 | 手机成人免费视频 | av在线激情 | 亚洲免费色 | 天天天天射 | 在线天堂v| 日韩欧美精品一区二区三区经典 | 亚洲一区二区精品视频 | 超碰在线观看av | 激情五月亚洲 | 国产成人一二三 | 国产高清视频免费最新在线 | 久久看看| 成人国产精品免费观看 | 91亚瑟视频 | 日本中文字幕一二区观 | av短片在线 | 国产精品久久久久一区二区 | 欧美激情xxxx | 在线观看网站av | 国产色秀视频 | 在线一二三区 | 国产中文字幕视频 | 国产色女 | 激情综合婷婷 | 日韩理论在线视频 | 美女久久一区 | 在线观看精品一区 | 一区二区三区 中文字幕 | 日韩电影中文 | 亚洲国产精品日韩 | 亚洲欧美视频网站 | 国产裸体视频网站 | 黄a在线看 | 欧美成人精品三级在线观看播放 | 欧美日韩国产精品爽爽 | 日韩一区二区免费视频 | 四虎在线观看网址 | 丰满少妇对白在线偷拍 | 一区二区三区免费播放 | 欧洲亚洲女同hd | 最近日韩免费视频 | 一区二区视频电影在线观看 | 在线电影 一区 | 久草视频免费在线观看 | 天天操欧美| 69成人在线| 久久久久国产精品免费网站 | 婷婷看片 | 在线观看成人一级片 | 99视频网站| 精品亚洲免a | 国产麻豆视频免费观看 | 4p变态网欧美系列 | 激情自拍av | 亚洲欧美视频在线观看 | 日韩在线播放视频 | 看片的网址| 毛片99| 成人毛片在线观看 | 久久精品视频中文字幕 | 人人看黄色 | 在线影院 国内精品 | 亚洲一级黄色大片 | 久草精品免费 | 亚州成人av在线 | 亚洲黄色免费网站 | av一级片网站| 亚洲天堂网在线视频 | 999成人网| 国产一级二级av | 国产精品九九久久99视频 | 91丨精品丨蝌蚪丨白丝jk | av在线色| 97成人啪啪网| 国产精品美女在线观看 | 中文字幕在线看人 | 天堂va在线观看 | 在线观看国产www | 51久久夜色精品国产麻豆 | 国产精品九九九九九 | 黄色国产在线观看 | 91精品视频导航 | 国产精品理论片 | 亚洲永久字幕 | 免费av看片| 精品九九九 | 国产不卡免费视频 | 亚洲2019精品 | 激情婷婷色 | 国产高清在线 | 99热最新地址 | 91精品婷婷国产综合久久蝌蚪 | 亚洲五月婷 | 日韩精品免费在线观看 | 99热这里只有精品久久 | 欧美色图视频一区 | 欧美日韩在线视频观看 | 欧美日韩亚洲国产一区 | 国产精品国产亚洲精品看不卡 | 亚洲视频精品 | 国产精品久免费的黄网站 | 伊人天天综合 | 国产91在线观看 | 美女黄色网在线播放 | 欧美91av | 在线精品亚洲一区二区 | 日韩午夜在线播放 | 国产 视频 久久 | 亚洲 欧洲av | 亚洲精品一区二区在线观看 | 国产一区二区在线免费播放 | 国产精品男女啪啪 | 免费视频在线观看网站 | 麻豆视频在线免费 | 国产亚洲精品久久久久动 | 手机av在线网站 | 国产一区二区三区在线免费观看 | 狠狠干夜夜 | 国产精品 中文字幕 亚洲 欧美 | 美女视频a美女大全免费下载蜜臀 | 国产精品免费观看视频 | 欧美精品久久久久久久久久丰满 | 日韩精品2区| 中文字幕av全部资源www中文字幕在线观看 | 99久久精品免费看国产麻豆 | 伊人永久 | 中文字幕av在线不卡 | 久99久久| 免费碰碰 | 国产精品久久久久久久午夜片 | 国产精品乱码久久 | 久久精品直播 | 在线视频日韩欧美 | 麻豆影视在线播放 | 国产在线观看不卡 | 日本爱爱免费视频 | 久久精品综合网 | 丁香九月激情 | 国产成人精品一区二区在线 | 中文字幕乱码在线播放 | 一区二区理论片 | 国产美女视频免费 | 五月婷视频 | 91精品国产99久久久久久红楼 | 97自拍超碰 | 精品一区二区在线免费观看 | www久久99| 网站在线观看日韩 | 开心激情综合网 | 日本激情视频中文字幕 | 国产午夜在线观看 | 国产精品毛片久久 | 色视频在线免费观看 | 丁香六月久久综合狠狠色 | 波多野结衣网址 | 2023亚洲精品国偷拍自产在线 | 国产伦理久久精品久久久久_ | 国产精品免费一区二区三区 | 美女视频永久黄网站免费观看国产 | 久久久久国产精品午夜一区 | 国产麻豆精品久久一二三 | 成人h视频 | 人人插人人艹 | 久久国产剧场电影 | av片一区 | 午夜精品久久久久99热app | 久草在线免| 精品在线观看一区二区三区 | 在线观看岛国 | 伊人五月天av | 去看片| 国产精品自产拍在线观看 | 欧美精品久 | 欧美精品久久久久 | 一区二区三区四区精品视频 | 免费看黄色91| 91在线色| 在线看欧美 | 久久精品视频在线 | 国内丰满少妇猛烈精品播 | 99欧美精品| 国产精品三级视频 | 日韩欧美黄色网址 | 精品国产乱码久久久久久天美 | 久久精品一区八戒影视 | 国产精品久久久久久久久久久免费 | 中文字幕在线播放日韩 | 一本大道久久精品懂色aⅴ 五月婷社区 | 不卡av电影在线 | 激情开心 | 97精品在线视频 | 精品久久久久久久久久久久 | av在线h | 亚洲精品一区二区三区新线路 | 91麻豆精品91久久久久同性 | 天天爱天天操 | 在线三级av| 香蕉久久久久 | 国产一区久久 | 国产精品爽爽爽 | 夜夜操狠狠干 | 超碰97人人在线 | 国产精品久久久久久久久久ktv | 国产精品一区二区久久精品爱微奶 | 成人精品电影 | 国产精品18久久久久久不卡孕妇 | 美女黄频| 国产精品va最新国产精品视频 | 中文字幕高清av | 亚洲精品一区二区网址 | 在线看片中文字幕 | 欧美精品在线观看一区 | 一级做a爱片性色毛片www | 国产一级不卡毛片 | 91精品国产99久久久久久红楼 | 免费a网站 | 精品久久久久久一区二区里番 | 特级黄色片免费看 | 日本在线精品视频 | 国产精品综合av一区二区国产馆 | а天堂中文最新一区二区三区 | 国产免费观看高清完整版 | 激情亚洲综合在线 | 久久新 | 久久综合免费视频 | 亚洲国产精品成人综合 | av福利在线导航 | 亚洲精品网页 | 日韩一级片观看 | 免费在线观看日韩 | 在线视频欧美日韩 | 在线av资源| 偷拍精品一区二区三区 | www..com毛片| 一级理论片在线观看 | 国产女人40精品一区毛片视频 | 欧美男同网站 | 国产99自拍 | 中文字幕日韩免费视频 | 亚洲精品久久久久中文字幕m男 | 国产精品原创视频 | 中文字幕免费一区二区 | 99国产精品久久久久老师 | 国产精品久久久久久久妇 | 国产一区二区三精品久久久无广告 | 亚洲成人网在线 | 中文字幕资源站 | 五月婷网 | 四虎国产精品成人免费4hu | 久久视频在线观看 | 中文超碰字幕 | 久久一区二区三区超碰国产精品 | 一区av在线播放 | 不卡的av电影 | 天天操狠狠干 | 成人在线视频网 | 99免费在线观看 | 午夜av激情| 三级视频国产 | 国产精品入口传媒 | 久久久精品视频网站 | 欧美aaa级片 | 久草在线综合 | 成人av影院在线观看 | 国精产品一二三线999 | 亚洲人成人天堂h久久 | 亚洲一区二区三区91 | 国产a级免费 | 最近免费观看的电影完整版 | 久久久久久高潮国产精品视 | 99国产在线 | 免费在线观看一区二区三区 | 国产黄色一级片在线 | 亚洲精品999 | 亚洲日韩欧美一区二区在线 | 丁香电影小说免费视频观看 | 少妇bbbb搡bbbb搡bbbb | 日本精品在线看 | 五月天九九 | 日韩欧美高清不卡 | 国产高清免费在线观看 | 欧洲黄色片 | 色91在线视频 | www.五月激情.com | 亚洲精品久久久久久国 | 日韩精品一区二区不卡 | 激情丁香月 | 亚洲经典中文字幕 | 国产福利av | 成人黄色在线看 | 天天操天天弄 | 男女拍拍免费视频 | 操操操综合 | 欧美成人区| 亚洲精品在线资源 | 亚洲香蕉在线观看 | 色网站在线免费观看 | 一区二区视频网站 | 亚洲精品大片www | 欧美日韩精品在线观看 | av在线免费在线 | 久久免费黄色 | 久久久久女人精品毛片九一 | 最近能播放的中文字幕 | 中文字幕日本在线 | 久久综合亚洲鲁鲁五月久久 | 91精品国 | 亚洲美女免费精品视频在线观看 | 午夜精品久久久久久 | 亚洲一二三区精品 | a天堂最新版中文在线地址 久久99久久精品国产 | 国产精品入口a级 | 久草视频免费在线播放 | 婷婷久久丁香 | 日韩专区中文字幕 | 成人性生交大片免费观看网站 | 麻豆国产精品视频 | 丁香花在线观看免费完整版视频 | 国产又粗又猛又爽又黄的视频免费 | 日韩精品高清视频 | 狠狠色伊人亚洲综合网站野外 | 99色人| 视频在线观看入口黄最新永久免费国产 | 色综合久久66 | 国产免费久久精品 | 日韩综合一区二区 | 日韩xxxxxxxxx| 808电影| 婷婷福利影院 | 91精品国产乱码久久桃 | 亚洲精品国产精品乱码在线观看 | 丁香婷五月 | 波多野结衣亚洲一区二区 | 999视频在线播放 | 成人app在线免费观看 | 天天综合色 | 日韩久久精品一区 | 91av视频免费观看 | 九九热在线精品 | 久久久久久久久国产 | 精品影院一区二区久久久 | 国产色视频一区二区三区qq号 | 国产精品原创 | 色噜噜在线观看视频 | 免费又黄又爽视频 | 天天草天天干天天射 | 九九久| 91精品国产乱码久久桃 | 成人av电影免费在线观看 | 亚洲自拍自偷 | 免费在线a| 国内精品久久久久久中文字幕 | 五月婷婷丁香六月 | 国产在线综合视频 | 国产精品丝袜 | 久久一区二区免费视频 | 四虎国产免费 | 久草com| 亚洲激情在线播放 | 天天射天天色天天干 | 国产成人精品一区二区三区福利 | 高清一区二区 | 久久天天拍 | 伊人精品在线 | 欧美久久久久久久久久久久 | 亚洲狠狠操 | 亚洲丁香日韩 | 草久草久 | av成人在线看 | 午夜精品一区二区三区在线 | 国产一性一爱一乱一交 | 日韩av一区在线观看 | 日韩av区| 嫩小bbbb摸bbb摸bbb | 天天射天天干天天插 | 黄网站色视频免费观看 | 国产精品毛片久久久久久久 | 久久怡红院 | 日韩资源在线观看 | 日韩欧美在线观看一区二区三区 | 色福利网站 | 国产亚洲精品成人av久久影院 | 在线免费中文字幕 | 日韩成人中文字幕 | 国产小视频在线观看 | 91喷水| 久久久精品国产免费观看一区二区 | 国产视频亚洲视频 | 日日爱视频 | 中文字幕在线观看免费高清电影 | 一级久久精品 | 激情网站网址 | 99精品在线视频观看 | 狠狠操电影网 | 亚洲精品一区二区三区新线路 | 东方av在线免费观看 | 色综合狠狠干 | 欧美日韩高清一区二区三区 | 天天射综合网站 | 天堂av色婷婷一区二区三区 | 欧美一级专区免费大片 | 九九视频一区 | 综合婷婷 | 亚洲精品中文在线 | 999视频在线观看 | 最新av免费在线 | 成人免费看片98欧美 | 久久综合九色综合97婷婷女人 | 国产91在线 | 美洲 | 欧美精品久久99 | 免费日韩av片 | 中文字幕首页 | 久久久午夜剧场 | 五月天久久综合网 | 亚洲经典在线 | 99色| 亚洲视频精选 | 狠狠躁日日躁夜夜躁av | 免费观看一级一片 | 色婷婷六月天 | 国产精品久久久久久999 | 黄色毛片大全 | 夜色成人av | 日韩一级片观看 | www.黄色片网站 | 911国产在线观看 | 视频二区 | 免费看一级一片 | 天天操天天舔天天干 | 在线观看91精品视频 | 黄色成人av网址 | 六月激情 | 日韩国产精品久久 | 欧美色图p | 亚洲精品在线免费看 | 激情小说久久 | 久久综合久久综合这里只有精品 | 免费中文字幕在线观看 | 美女视频网站久久 | 久久免费视频观看 | 午夜久久美女 | 9在线观看免费高清完整版 玖玖爱免费视频 | 精品国产一区在线观看 | 99精品在线观看 | 狠狠的日| 中文字幕xxxx| 国产色女人 | 黄色的网站在线 | 国产在线观看免费观看 | 日日爽视频 | 婷婷丁香社区 | 中文一区二区三区在线观看 | 日日夜夜天天 | 日韩中出在线 | 国产一级黄色片免费看 | 波多野结衣在线视频一区 | 天天天天干 | 成年人app网址| 96超碰在线 | 国产精品精品久久久久久 | 国产精品99免费看 | 免费看的视频 | 精品一区电影国产 | 国产精品一区在线观看你懂的 | 日韩精品视频免费看 | 亚洲精品九九 | 亚洲一区二区精品视频 | 五月综合色婷婷 | 欧美aaa一级 | 久久久999 | 丝袜美腿在线视频 | 日本中文字幕在线 | 欧美另类xxxx | 91在线免费观看网站 | 久久婷婷开心 | 国产精品毛片久久久久久久久久99999999 | 欧美一级在线观看视频 | www激情网 | 久久精久久精 | 一区二区三区播放 | 日韩手机在线 | 精品一二区 | 在线中文字幕播放 | 天天爽天天爽天天爽 | 成人av一区二区三区 | 在线综合 亚洲 欧美在线视频 | 欧美天天综合网 | 免费在线视频一区二区 | 欧美日韩中文另类 | 肉色欧美久久久久久久免费看 | 天天激情综合网 | 成人在线播放免费观看 | 成人国产网址 | 中文字幕高清视频 | 欧美在线观看视频一区二区三区 | 免费看短 | 亚洲视频在线观看网站 | 18做爰免费视频网站 | 日日躁夜夜躁aaaaxxxx | 天天人人 | 久久精品99国产精品日本 | 美女网站在线免费观看 | 国产一区二区视频在线 | 中文十次啦 | 伊人热| 福利视频午夜 | 在线91色 | 天天综合精品 | 国产一级免费观看视频 | 夜夜爽夜夜操 | 亚洲成年人在线播放 | 日产乱码一二三区别免费 | 97色噜噜 | 人人要人人澡人人爽人人dvd | 又爽又黄又无遮挡网站动态图 | 欧美日韩精品在线一区二区 | a√国产免费a| 色av婷婷 | 日b视频国产| 在线观看91精品视频 | 久久久久久久久久亚洲精品 | 国产精品女人久久久久久 | 成人动漫一区二区 | 日韩精品一区不卡 | 97视频在线免费观看 | 欧美污在线观看 | 中文字幕在线观看免费 | 国产99久久精品一区二区永久免费 | 97精品久久 | 91黄视频在线观看 | 色天天中文 | 在线免费视 | 亚洲人人av | 国产精品入口a级 | 美女视频a美女大全免费下载蜜臀 | 99久久久国产精品免费观看 | 日韩三级视频在线看 | 国产毛片久久 | 免费av网站在线看 | 人人爽人人干 | 欧美国产日韩一区 | 国产精品久久久久久吹潮天美传媒 | 久久国产麻豆 | 国产精品区二区三区日本 | 99国产一区 | 99这里只有精品视频 | 久久美女免费视频 | 免费男女羞羞的视频网站中文字幕 | 日韩av电影手机在线观看 | 五月婷网站 | 天天躁日日躁狠狠躁av麻豆 | 亚洲黄色小说网 | 玖玖玖精品 | 玖玖视频网 | 欧美极品xxxx | 国产精品乱码久久久 | 国产精品久久久久久久久久久免费 | 亚洲精品乱码久久久久久久久久 | 欧美性生爱 | 五月av在线 | 久久一区精品 | 亚洲国内精品在线 | 中文在线天堂资源 | 91av视频免费在线观看 | av3级在线 | 亚洲免费成人 | 免费成人在线视频网站 | 久久免费视频网站 | 成人精品999| 精品亚洲网 | 免费av看片| 在线播放日韩av | 天天超碰 | 国产精品成人自产拍在线观看 | 日韩电影中文字幕在线 | 人人看人人做人人澡 | 欧美不卡视频在线 | 视频二区在线视频 | 狠狠色狠狠色综合系列 | 一级做a视频 | 国产一级免费电影 | 国产一区在线免费 | 成人福利在线观看 | 国产精品区免费视频 | 色综合天天视频在线观看 | 激情在线网址 | 久久精品99国产 | 日日夜夜综合 | 综合久久网站 | 日精品在线观看 | 97视频人人免费看 | 国产黄色av影视 | av福利在线看 | www.99在线观看 | 成人电影毛片 | 国产精品亚洲视频 | 亚洲视频第一页 | 人人干人人上 | 伊人资源视频在线 | 夜夜夜夜夜夜操 | 亚洲国产精品视频在线观看 | 欧美日本三级 | 中文字幕在线观看完整版电影 | 黄色小网站在线观看 | 久久99偷拍视频 | 一区二区电影网 | 国产只有精品 | 久久精品在线免费观看 | 国产精品美女久久久久久久久久久 | 久久美女视频 | 黄色成人在线观看 | 久久电影日韩 | 久草在线免费看视频 | 国产91全国探花系列在线播放 | 人人爽人人爽人人爽 | 91精品国产麻豆 | 国产精品无av码在线观看 | 久久天堂精品视频 | 亚洲精品视频中文字幕 | 91大神精品视频 | 天天做综合网 | 99人久久精品视频最新地址 | 国产精品免费在线播放 | 成人av资源网站 | 在线国产能看的 | 亚洲一区视频在线播放 | 国产成人av在线影院 | 性色大片在线观看 | 特级aaa毛片 | 久久99精品久久久久久久久久久久 | 国产高清绿奴videos | 久久国内精品视频 | 人人爽人人乐 | 久久新 | 国产麻豆果冻传媒在线观看 | 51精品国自产在线 | 久久九九影院 | 久久av免费 | 日韩激情在线视频 | 久久香蕉一区 | 在线观看免费色 | 免费成人结看片 | 国产亚洲精品久久网站 | 不卡av在线免费观看 | 久久久穴| 97国产精品视频 | 波多野结衣在线播放一区 | 日本婷婷色 | 国产精品国产三级国产aⅴ9色 | 91视频这里只有精品 | 丝袜少妇在线 | 成人午夜电影网站 | 色在线免费视频 | 人人澡人人爽欧一区 | 欧美日韩免费网站 | 国产精品毛片久久久久久久久久99999999 | 激情婷婷在线 | 久久久精品电影 | 最新久久免费视频 | 久久久久久高清 | 高潮毛片无遮挡高清免费 | 精品国产自 | 久久99精品国产 | 一级黄色a视频 | 在线观看国产日韩欧美 | 婷婷久久五月天 | 久久综合影院 | 免费久久精品视频 | 2019av在线视频 | 综合久久精品 | 亚洲综合色视频在线观看 | 国产91综合一区在线观看 | 日本三级久久久 | 在线观看免费色 | 手机版av在线 | 国产一区二区精品久久91 | 欧美久久综合 | 亚洲成人午夜av | 青春草视频在线播放 | 色网站在线看 | av黄色在线观看 | 国产自产在线视频 | 丁香婷婷激情啪啪 | 99久久久久| 99精品国产免费久久久久久下载 | 精品国产aⅴ一区二区三区 在线直播av | 久久精品官网 | 欧美性猛片,| 成人亚洲综合 | 亚洲欧美日韩精品久久奇米一区 | 久久精品美女视频 | 91完整版在线观看 | 香蕉影院在线 | 久久久久9999亚洲精品 | 偷拍福利视频一区二区三区 | 波多野结衣在线播放视频 | 99色在线观看 | 亚洲免费国产 | 久久综合久色欧美综合狠狠 | 日韩欧美一区二区三区视频 | 久久不射电影网 | 中文字幕2021 | 日韩欧美在线一区二区 | 99视频精品免费视频 | 欧美综合在线视频 | 麻豆精品国产传媒 | 久久免费的精品国产v∧ | 成人黄色小说在线观看 | 色一级片| 国产精品久久久久久久免费 | 国产精品久久久久久a | 五月婷婷狠狠 | 国产成人精品一区二区三区网站观看 |