欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

高級(jí)iOS面試題有哪些-創(chuàng)新互聯(lián)

這篇文章主要介紹“高級(jí)iOS面試題有哪些”,在日常操作中,相信很多人在高級(jí)iOS面試題有哪些問(wèn)題上存在疑惑,小編查閱了各式資料,整理出簡(jiǎn)單好用的操作方法,希望對(duì)大家解答”高級(jí)iOS面試題有哪些”的疑惑有所幫助!接下來(lái),請(qǐng)跟著小編一起來(lái)學(xué)習(xí)吧!

創(chuàng)新互聯(lián)建站IDC提供業(yè)務(wù):雅安移動(dòng)機(jī)房,成都服務(wù)器租用,雅安移動(dòng)機(jī)房,重慶服務(wù)器租用等四川省內(nèi)主機(jī)托管與主機(jī)租用業(yè)務(wù);數(shù)據(jù)中心含:雙線機(jī)房,BGP機(jī)房,電信機(jī)房,移動(dòng)機(jī)房,聯(lián)通機(jī)房。

1、NSArray與NSSet的區(qū)別?

  • NSArray內(nèi)存中存儲(chǔ)地址連續(xù),而NSSet不連續(xù)

  • NSSet效率高,內(nèi)部使用hash查找;NSArray查找需要遍歷

  • NSSet通過(guò)anyObject訪問(wèn)元素,NSArray通過(guò)下標(biāo)訪問(wèn)

2、NSHashTable與NSMapTable?

  • NSHashTable是NSSet的通用版本,對(duì)元素弱引用,可變類(lèi)型;可以在訪問(wèn)成員時(shí)copy

  • NSMapTable是NSDictionary的通用版本,對(duì)元素弱引用,可變類(lèi)型;可以在訪問(wèn)成員時(shí)copy

(注:NSHashTable與NSSet的區(qū)別:NSHashTable可以通過(guò)option設(shè)置元素弱引用/copyin,只有可變類(lèi)型。但是添加對(duì)象的時(shí)候NSHashTable耗費(fèi)時(shí)間是NSSet的兩倍。
NSMapTable與NSDictionary的區(qū)別:同上)

3、屬性關(guān)鍵字assign、retain、weak、copy

  • assign:用于基本數(shù)據(jù)類(lèi)型和結(jié)構(gòu)體。如果修飾對(duì)象的話,當(dāng)銷(xiāo)毀時(shí),屬性值不會(huì)自動(dòng)置nil,可能造成野指針。

  • weak:對(duì)象引用計(jì)數(shù)為0時(shí),屬性值也會(huì)自動(dòng)置nil

  • retain:強(qiáng)引用類(lèi)型,ARC下相當(dāng)于strong,但block不能用retain修飾,因?yàn)榈韧赼ssign不安全。

  • strong:強(qiáng)引用類(lèi)型,修飾block時(shí)相當(dāng)于copy。

4、weak屬性如何自動(dòng)置nil的?

  • Runtime會(huì)對(duì)weak屬性進(jìn)行內(nèi)存布局,構(gòu)建hash表:以weak屬性對(duì)象內(nèi)存地址為key,weak屬性值(weak自身地址)為value。當(dāng)對(duì)象引用計(jì)數(shù)為0 dealloc時(shí),會(huì)將weak屬性值自動(dòng)置nil。

5、Block的循環(huán)引用、內(nèi)部修改外部變量、三種block

  • block強(qiáng)引用self,self強(qiáng)引用block

  • 內(nèi)部修改外部變量:block不允許修改外部變量的值,這里的外部變量指的是棧中指針的內(nèi)存地址。__block的作用是只要觀察到變量被block使用,就將外部變量在棧中的內(nèi)存地址放到堆中。

  • 三種block:NSGlobalBlack(全局)、NSStackBlock(棧block)、NSMallocBlock(堆block)

6、KVO底層實(shí)現(xiàn)原理?手動(dòng)觸發(fā)KVO?swift如何實(shí)現(xiàn)KVO?

  • KVO原理:當(dāng)觀察一個(gè)對(duì)象時(shí),runtime會(huì)動(dòng)態(tài)創(chuàng)建繼承自該對(duì)象的類(lèi),并重寫(xiě)被觀察對(duì)象的setter方法,重寫(xiě)的setter方法會(huì)負(fù)責(zé)在調(diào)用原setter方法前后通知所有觀察對(duì)象值得更改,最后會(huì)把該對(duì)象的isa指針指向這個(gè)創(chuàng)建的子類(lèi),對(duì)象就變成子類(lèi)的實(shí)例。

  • 如何手動(dòng)觸發(fā)KVO:在setter方法里,手動(dòng)實(shí)現(xiàn)NSObject兩個(gè)方法:willChangeValueForKey、didChangeValueForKey

  • swift的kvo:繼承自NSObject的類(lèi),或者直接willset/didset實(shí)現(xiàn)。

7、categroy為什么不能添加屬性?怎么實(shí)現(xiàn)添加?與Extension的區(qū)別?category覆蓋原類(lèi)方法?多個(gè)category調(diào)用順序

  • Runtime初始化時(shí)categroy的內(nèi)存布局已經(jīng)確定,沒(méi)有ivar,所以默認(rèn)不能添加屬性。

  • 使用runtime的關(guān)聯(lián)對(duì)象,并重寫(xiě)setter和getter方法。

  • Extenstion編譯期創(chuàng)建,可以添加成員變量ivar,一般用作隱藏類(lèi)的信息。必須要有類(lèi)的源碼才可以添加,如NSString就不能創(chuàng)建Extension。

  • category方法會(huì)在runtime初始化的時(shí)候copy到原來(lái)前面,調(diào)用分類(lèi)方法的時(shí)候直接返回,不再調(diào)用原類(lèi)。如何保持原類(lèi)也調(diào)用( https://www.jianshu.com/p/40e28c9f9da5)。

  • 多個(gè)category的調(diào)用順序按照:Build Phases ->Complie Source 中的編譯順序。

8、load方法和initialize方法的異同?!饕f(shuō)一下執(zhí)行時(shí)間,各自用途,沒(méi)實(shí)現(xiàn)子類(lèi)的方法會(huì)不會(huì)調(diào)用父類(lèi)的?
load initialize 調(diào)用時(shí)機(jī) app啟動(dòng)后,runtime初始化的時(shí)候 第一個(gè)方法調(diào)用前調(diào)用 調(diào)用順序 父類(lèi)->本類(lèi)->分類(lèi) 父類(lèi)->本類(lèi)(如果有分類(lèi)直接調(diào)用分類(lèi),本類(lèi)不會(huì)調(diào)用) 沒(méi)實(shí)現(xiàn)子類(lèi)的方法會(huì)不會(huì)調(diào)用父類(lèi)的 否 是 是否沿用父類(lèi)實(shí)現(xiàn) 否 是

高級(jí)iOS面試題有哪些

image

9、對(duì) runtime 的理解?!饕欠椒ㄕ{(diào)用時(shí)如何查找緩存,如何找到方法,找不到方法時(shí)怎么轉(zhuǎn)發(fā),對(duì)象的內(nèi)存布局

OC中向?qū)ο蟀l(fā)送消息時(shí),runtime會(huì)根據(jù)對(duì)象的isa指針找到對(duì)象所屬的類(lèi),然后在該類(lèi)的方法列表和父類(lèi)的方法列表中尋找方法執(zhí)行。如果在最頂層父類(lèi)中沒(méi)找到方法執(zhí)行,就會(huì)進(jìn)行消息轉(zhuǎn)發(fā):Method resoution(實(shí)現(xiàn)方法)、fast forwarding(轉(zhuǎn)發(fā)給其他對(duì)象)、normal forwarding(完整消息轉(zhuǎn)發(fā)??梢赞D(zhuǎn)發(fā)給多個(gè)對(duì)象)

10、runtime 中,SEL和IMP的區(qū)別?

每個(gè)類(lèi)對(duì)象都有一個(gè)方法列表,方法列表存儲(chǔ)方法名、方法實(shí)現(xiàn)、參數(shù)類(lèi)型,SEL是方法名(編號(hào)),IMP指向方法實(shí)現(xiàn)的首地址

11、autoreleasepool的原理和使用場(chǎng)景?

  • 若干個(gè)autoreleasepoolpage組成的雙向鏈表的棧結(jié)構(gòu),objc_autoreleasepoolpush、objc_autoreleasepoolpop、objc_autorelease

  • 使用場(chǎng)景:多次創(chuàng)建臨時(shí)變量導(dǎo)致內(nèi)存上漲時(shí),需要延遲釋放

  • autoreleasepoolpage的內(nèi)存結(jié)構(gòu):4k存儲(chǔ)大小

高級(jí)iOS面試題有哪些

image

12、Autorelase對(duì)象什么時(shí)候釋放?

在沒(méi)有手加Autorelease Pool的情況下,Autorelease對(duì)象是在當(dāng)前的runloop迭代結(jié)束時(shí)釋放的,而它能夠釋放的原因是系統(tǒng)在每個(gè)runloop迭代中都加入了自動(dòng)釋放池Push和Pop。

13、Runloop與線程的關(guān)系?Runloop的mode? Runloop的作用??jī)?nèi)部機(jī)制?

  • 每一個(gè)線程都有一個(gè)runloop,主線程的runloop默認(rèn)啟動(dòng)。

  • mode:主要用來(lái)指定事件在運(yùn)行時(shí)循環(huán)的優(yōu)先級(jí)

  • 作用:保持程序的持續(xù)運(yùn)行、隨時(shí)處理各種事件、節(jié)省cpu資源(沒(méi)事件休息釋放資源)、渲染屏幕UI

14、iOS中使用的鎖、死鎖的發(fā)生與避免

  • @synchronized、信號(hào)量、NSLock等

  • 死鎖:多個(gè)線程同時(shí)訪問(wèn)同一資源,造成循環(huán)等待。GCD使用異步線程、并行隊(duì)列

15、NSOperation和GCD的區(qū)別

  • GCD底層使用C語(yǔ)言編寫(xiě)高效、NSOperation是對(duì)GCD的面向?qū)ο蟮姆庋b。對(duì)于特殊需求,如取消任務(wù)、設(shè)置任務(wù)優(yōu)先級(jí)、任務(wù)狀態(tài)監(jiān)聽(tīng),NSOperation使用起來(lái)更加方便。

  • NSOperation可以設(shè)置依賴(lài)關(guān)系,而GCD只能通過(guò)dispatch_barrier_async實(shí)現(xiàn)

  • NSOperation可以通過(guò)KVO觀察當(dāng)前operation執(zhí)行狀態(tài)(執(zhí)行/取消)

  • NSOperation可以設(shè)置自身優(yōu)先級(jí)(queuePriority)。GCD只能設(shè)置隊(duì)列優(yōu)先級(jí)(DISPATCH_QUEUE_PRIORITY_DEFAULT),無(wú)法在執(zhí)行的block中設(shè)置優(yōu)先級(jí)

  • NSOperation可以自定義operation如NSInvationOperation/NSBlockOperation,而GCD執(zhí)行任務(wù)可以自定義封裝但沒(méi)有那么高的代碼復(fù)用度

  • GCD高效,NSOperation開(kāi)銷(xiāo)相對(duì)高

16、oc與js交互

  • 攔截url

  • JavaScriptCore(只適用于UIWebView)

  • WKScriptMessageHandler(只適用于WKWebView)

  • WebViewJavaScriptBridge(第三方框架)

17、swift相比OC有什么優(yōu)勢(shì)?

18、struct、Class的區(qū)別

  • class可以繼承,struct不可以

  • class是引用類(lèi)型,struct是值類(lèi)型

  • struct在function里修改property時(shí)需要mutating關(guān)鍵字修飾

19、訪問(wèn)控制關(guān)鍵字(public、open、private、filePrivate、internal)

  • public與open:public在module內(nèi)部中,class和func都可以被訪問(wèn)/重載/繼承,外部只能訪問(wèn);而open都可以

  • private與filePrivate:private修飾class/func,表示只能在當(dāng)前class源文件/func內(nèi)部使用,外部不可以被繼承和訪問(wèn);而filePrivate表示只能在當(dāng)前swift源文件內(nèi)訪問(wèn)

  • internal:在整個(gè)模塊或者app內(nèi)都可以訪問(wèn),默認(rèn)訪問(wèn)級(jí)別,可寫(xiě)可不寫(xiě)

20、OC與Swift混編

  • OC調(diào)用swift:import "工程名-swift.h” @objc

  • swift調(diào)用oc:橋接文件

21、map、filter、reduce?map與flapmap的區(qū)別?

  • map:數(shù)組中每個(gè)元素都經(jīng)過(guò)某個(gè)方法轉(zhuǎn)換,最后返回新的數(shù)組(xx.map({高級(jí)iOS面試題有哪些0}))

  • flatmap:同map類(lèi)似,區(qū)別在flatmap返回的數(shù)組不存在nil,并且會(huì)把optional解包;而且還可以把嵌套的數(shù)組打開(kāi)變成一個(gè)([[1,2],[2,3,4],[5,6]] ->[1,2,2,3,4,5,6])

  • filter:用戶篩選元素(xxx.filter({$0 > 25}),篩選出大于25的元素組成新數(shù)組)

  • reduce:把數(shù)組元素組合計(jì)算為一個(gè)值,并接收初始值()

高級(jí)iOS面試題有哪些

image

22、guard與defer

  • guard用于提前處理錯(cuò)誤數(shù)據(jù),else退出程序,提高代碼可讀性

  • defer延遲執(zhí)行,回收資源。多個(gè)defer反序執(zhí)行,嵌套defer先執(zhí)行外層,后執(zhí)行內(nèi)層

23、try、try?與try!

  • try:手動(dòng)捕捉異常

  • try?:系統(tǒng)幫我們處理,出現(xiàn)異常返回nil;沒(méi)有異常返回對(duì)應(yīng)的對(duì)象

  • try!:直接告訴系統(tǒng),該方法沒(méi)有異常。如果出現(xiàn)異常程序會(huì)crash

24、@autoclosure:把一個(gè)表達(dá)式自動(dòng)封裝成閉包

25、throws與rethrows:throws另一個(gè)throws時(shí),將前者改為rethrows

26、App啟動(dòng)優(yōu)化策略?main函數(shù)執(zhí)行前后怎么優(yōu)化

  • 啟動(dòng)時(shí)間 = pre-main耗時(shí)+main耗時(shí)

  • pre-main階段優(yōu)化:

  • 刪除無(wú)用代碼

  • 抽象重復(fù)代碼

  • +load方法做的事情延遲到initialize中,或者+load的事情不宜花費(fèi)太多時(shí)間

  • 減少不必要的framework,或者優(yōu)化已有framework

  • Main階段優(yōu)化

  • didFinishLauchingwithOptions里代碼延后執(zhí)行

  • 首次啟動(dòng)渲染的頁(yè)面優(yōu)化

27、crash防護(hù)?

  • unrecognized selector crash

  • KVO crash

  • NSNotification crash

  • NSTimer crash

  • Container crash(數(shù)組越界,插nil等)

  • NSString crash (字符串操作的crash)

  • Bad Access crash (野指針)

  • UI not on Main Thread Crash (非主線程刷UI (機(jī)制待改善))

28、內(nèi)存泄露問(wèn)題?

主要集中在循環(huán)引用問(wèn)題中,如block、NSTime、perform selector引用計(jì)數(shù)問(wèn)題。

29、UI卡頓優(yōu)化?

30、架構(gòu)&設(shè)計(jì)模式

  • MVC設(shè)計(jì)模式介紹

  • MVVM介紹、MVC與MVVM的區(qū)別?

  • ReactiveCocoa的熱信號(hào)與冷信號(hào)

  • 緩存架構(gòu)設(shè)計(jì)LRU方案

  • SDWebImage源碼,如何實(shí)現(xiàn)解碼

  • AFNetWorking源碼分析

  • 組件化的實(shí)施,中間件的設(shè)計(jì)

  • 哈希表的實(shí)現(xiàn)原理?如何解決沖突

31、數(shù)據(jù)結(jié)構(gòu)&算法

  • 快速排序、歸并排序

  • 二維數(shù)組查找(每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請(qǐng)完成一個(gè)函數(shù),輸入這樣的一個(gè)二維數(shù)組和一個(gè)整數(shù),判斷數(shù)組中是否含有該整數(shù))

  • 二叉樹(shù)的遍歷:判斷二叉樹(shù)的層數(shù)

  • 單鏈表判斷環(huán)

32、計(jì)算機(jī)基礎(chǔ)

  1. http與https?socket編程?tcp、udp?get與post?

  2. tcp三次握手與四次握手

  3. 進(jìn)程與線程的區(qū)別

到此,關(guān)于“高級(jí)iOS面試題有哪些”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注創(chuàng)新互聯(lián)-成都網(wǎng)站建設(shè)公司網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)?lái)更多實(shí)用的文章!

網(wǎng)站標(biāo)題:高級(jí)iOS面試題有哪些-創(chuàng)新互聯(lián)
網(wǎng)站地址:http://aaarwkj.com/article8/dpioip.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供用戶體驗(yàn)、網(wǎng)站導(dǎo)航、網(wǎng)站設(shè)計(jì)公司、移動(dòng)網(wǎng)站建設(shè)手機(jī)網(wǎng)站建設(shè)、云服務(wù)器

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

綿陽(yáng)服務(wù)器托管

網(wǎng)站設(shè)計(jì)公司知識(shí)

日韩成人午夜视频在线| 九九九视频精品免费九九| 色哟哟亚洲精品在线视频| 日韩人妻系列在线观看| 欧美内射专区精品一区| 美女少妇性高潮的视频| 一区二区在线视频中文字幕| 好吊毛片一区二区三区| 91久久一区二区秋霞免费| 欧美精品日韩中文字幕在| 久久综合午夜福利视频| 麻豆国产97在线精品一区| 91深夜在线免费观看| 日本午夜精品在线观看| 亚洲中文有码一区二区| 亚洲av乱码一区二区三区观影| 国产伦国产一区二区三区在线观看| 欧美日韩精品一区二区三| 少妇高潮在线观看免费| 亚洲一区二区三区精品福利| 国产青草视频免观看视频| 校花出白浆视频一区二区三区| 日韩精品一区二区av在线| 亚洲乱码一区二区三区人妇| 国产精品18禁一区二区三区| 十八禁真人无摭挡观看| 久久热在线观看免费高清| 日韩av天堂免费网站| 一本之道高清久久久首页| 亚洲成av人亚洲av| 美女福利视频一区二区| 欧美日韩一区二区三区大片| 裸体性做爰免费视频网站| 国产91日韩欧美在线| 91九色蝌蚪国产欧美亚洲| 亚洲国产精品一区二区三| 日本在线观看高清区一区二| 国产传媒视频在线免费观看| 国产一区二区高清不卡| 国内熟妇人妻色在线三级| 国产区av中文字幕在线观看|