一. 運(yùn)行時(shí)你是怎么理解的,怎么用
ObjC Runtime 其實(shí)是一個(gè) Runtime 庫(kù)缕陕,基本上用 C 和匯編寫(xiě)的,這個(gè)庫(kù)使得 C 語(yǔ)言有了面向?qū)ο蟮哪芰ο寐恕_@個(gè)庫(kù)做的事情就是加載類(lèi)的信息翘瓮,進(jìn)行方法的分發(fā)和轉(zhuǎn)發(fā)之類(lèi)的。OC是一種面向runtime(運(yùn)行時(shí))的語(yǔ)言遍坟,也就是說(shuō)拳亿,它會(huì)盡可能地把代碼執(zhí)行的決策從編譯和鏈接的時(shí)候推遲到運(yùn)行時(shí)。這給程序員寫(xiě)代碼帶來(lái)很大的靈活性愿伴,比如說(shuō)你可以把消息轉(zhuǎn)發(fā)給你想要的對(duì)象肺魁,或者隨意交換一個(gè)方法的實(shí)現(xiàn)之類(lèi)的。這就要求runtime能檢測(cè)一個(gè)對(duì)象是否能對(duì)一個(gè)方法進(jìn)行響應(yīng)隔节,然后再把這個(gè)方法分發(fā)到對(duì)應(yīng)的對(duì)象去鹅经。我們拿 C 來(lái)跟 ObjC 對(duì)比一下。在 C 語(yǔ)言里面怎诫,一切從 main 函數(shù)開(kāi)始瘾晃,程序員寫(xiě)代碼的時(shí)候是自上而下地,一個(gè) C 的結(jié)構(gòu)體或者說(shuō)類(lèi)吧幻妓,是不能把方法調(diào)用轉(zhuǎn)發(fā)給其他對(duì)象的蹦误。這個(gè)問(wèn)題其實(shí)涉及到兩個(gè)概念,運(yùn)行時(shí)和多態(tài)肉津。 簡(jiǎn)單來(lái)說(shuō)强胰,運(yùn)行時(shí)機(jī)制使我們直到運(yùn)行時(shí)才去決定一個(gè)對(duì)象的類(lèi)別,以及調(diào)用該類(lèi)別對(duì)象指定方法妹沙。 多態(tài):不同對(duì)象以自己的方式響應(yīng)相同的消息的能力叫做多態(tài)哪廓。意思就是假設(shè)生物類(lèi)(life)都用有一個(gè)相同的方法-eat; 那人類(lèi)屬于生物,豬也屬于生物初烘,都繼承了life后涡真,實(shí)現(xiàn)各自的eat,但是調(diào)用是我們只需調(diào)用各自的eat方法肾筐。 也就是不同的對(duì)象以自己的方式響應(yīng)了相同的消息 響應(yīng)了eat這個(gè)選擇器哆料。因此也可以說(shuō),運(yùn)行時(shí)機(jī)制是多態(tài)的基礎(chǔ)吗铐。比如KVO中我們就用了东亦。
二. 你單例怎么理解怎么用的?
單例設(shè)計(jì)模式,一個(gè)類(lèi)只有一個(gè)實(shí)例,而且該實(shí)例易于外界訪問(wèn),方便對(duì)實(shí)例個(gè)數(shù)的控制并節(jié)約系統(tǒng)資源。類(lèi)只能有一個(gè)實(shí)例,而且必須從一個(gè)為人熟知的訪問(wèn)點(diǎn)對(duì)其進(jìn)行訪問(wèn)典阵,比如工廠方法奋渔。在程序中,我需要一系列的對(duì)象壮啊,他們每一個(gè)內(nèi)部都包含有一組變量和功能嫉鲸,是靜態(tài)的,而且整個(gè)程序都只需要擁有一個(gè)該類(lèi)的對(duì)象歹啼。例如:
1.登陸界面(點(diǎn)擊多個(gè)地方都彈出相同的控制器)玄渗;
2.管理數(shù)據(jù)庫(kù);
3.音效控制狸眼;
4.文件處理:
5.封裝網(wǎng)絡(luò)工具類(lèi)等等...
三. 說(shuō)說(shuō)oc這門(mén)語(yǔ)言吧藤树,和c \ c++比,你覺(jué)得哪個(gè)效率高拓萌,高到哪里了?
object_c比C++稍慢岁钓,是因?yàn)閛bject_c的一些語(yǔ)言特性,比如反射微王,影響了執(zhí)行效率屡限。區(qū)別主要有以下一些方面。
- 單一繼承:Objective-C不支持多重繼承骂远,(同Java和Smalltalk)囚霸,而C++語(yǔ)言支持多重繼承腰根。
- 動(dòng)態(tài):Objective-C是動(dòng)態(tài)定型(dynamicaly typed)所以它的類(lèi)庫(kù)比C++要容易操作激才。Objective-C 在運(yùn)行時(shí)可以允許根據(jù)字符串名字來(lái)訪問(wèn)方法和類(lèi),還可以動(dòng)態(tài)連接和添加類(lèi)额嘿。C++ 跟從面向?qū)ο缶幊汤锏腟imula67(一種早期OO語(yǔ)言)學(xué)派瘸恼,而Objecive-C屬于Smalltalk學(xué)派。
在C++里册养,對(duì)象的靜態(tài)類(lèi)型決定你是否可以發(fā)送消息給它东帅,而對(duì)Objecive-C來(lái)說(shuō),由動(dòng)態(tài)類(lèi)型來(lái)決定球拦。Simula 67學(xué)派更安全靠闭,因?yàn)榇蟛糠皱e(cuò)誤可以在編譯時(shí)查出。而Smalltalk學(xué)派更靈活坎炼,比如一些Smalltalk看來(lái)無(wú)誤的程序拿到Simualr 67那里就無(wú)法通過(guò)愧膀。從很多方面來(lái)看,C++和Objective-C的差別谣光,與其說(shuō)時(shí)技術(shù)上的檩淋,不如說(shuō)是思維方式上的...
四. 代理,通知,KVO 各有什么優(yōu)缺點(diǎn)
代理優(yōu)勢(shì):
1.語(yǔ)法嚴(yán)格,將要監(jiān)聽(tīng)的事件必須是delegate協(xié)議中有清晰的定義
2.如果delegate中的一個(gè)方法沒(méi)有實(shí)現(xiàn)那么就會(huì)出現(xiàn)編譯警告/錯(cuò)誤
3.在一個(gè)應(yīng)用中的控制流程是可跟蹤的并且是可識(shí)別的;
4.在一個(gè)控制器中可以定義定義多個(gè)不同的協(xié)議萄金,每個(gè)協(xié)議有不同的delegate
5.沒(méi)有第三方對(duì)象要求保持/監(jiān)視通信過(guò)程蟀悦。
代理缺點(diǎn)
1.需要編寫(xiě)很多代碼.
- 定義delegate屬性時(shí),需要注意strong\weak的問(wèn)題.
3.一般用于父子關(guān)系,層級(jí)結(jié)構(gòu)不能太復(fù)雜.
通知優(yōu)點(diǎn)
1.不需要編寫(xiě)太多代碼,實(shí)現(xiàn)比較簡(jiǎn)單.
2.對(duì)于一個(gè)發(fā)出的通知媚朦,多個(gè)對(duì)象能夠做出反應(yīng),即1對(duì)多的方式實(shí)現(xiàn)簡(jiǎn)單.
3.controller能夠傳遞context對(duì)象(dictionary)日戈,context對(duì)象攜帶了關(guān)于發(fā)送通知的自定義的信息
4.層級(jí)結(jié)構(gòu)比較深的時(shí)候用.
通知缺點(diǎn)
1.在編譯期不會(huì)檢查通知是否能夠被觀察者正確的處理询张;
2.在釋放注冊(cè)的對(duì)象時(shí),需要在通知中心取消注冊(cè)涎拉;
3.在調(diào)試的時(shí)候應(yīng)用的工作以及控制過(guò)程難跟蹤瑞侮;
4.觀察者需要提前知道通知名稱(chēng).
5.通知發(fā)出后,controller不能從觀察者獲得任何的反饋信息鼓拧。
KVO優(yōu)點(diǎn)
1.能夠提供一種簡(jiǎn)單的方法實(shí)現(xiàn)兩個(gè)對(duì)象間的同步半火。
2.能夠?qū)Ψ俏覀儎?chuàng)建的對(duì)象,即內(nèi)部對(duì)象的狀態(tài)改變作出響應(yīng).
KVO缺點(diǎn)
1.我們觀察的屬性必須使用strings來(lái)定義季俩。因此在編譯器不會(huì)出現(xiàn)警告以及檢查钮糖;
2.它只能用來(lái)對(duì)屬性作出反應(yīng),而不會(huì)用來(lái)對(duì)方法或者動(dòng)作作出反應(yīng).
3.需要手動(dòng)移除觀察者酌住。
五. 怎么實(shí)現(xiàn)在一個(gè)線程中同時(shí)執(zhí)行兩個(gè)任務(wù)店归?
怎么都做不到
六. BASE64的用法?
BASE64是網(wǎng)絡(luò)傳輸中最常用的編碼格式 - 用來(lái)將二進(jìn)制的數(shù)據(jù)編碼成字符串的編碼方式.
1> 能夠編碼,能夠解碼.
2> 被很多的加密算法作為基礎(chǔ)算法.
七. 什么是消息推送
可以繞過(guò)運(yùn)營(yíng)商,通過(guò)標(biāo)準(zhǔn)TCP/IP網(wǎng)絡(luò)直接向這些手機(jī)發(fā)送消息.這些消息就稱(chēng)為推送消息.推送消息是通過(guò)Apple和Google掌控的互聯(lián)網(wǎng)服務(wù)器發(fā)送的.推送消息從根本上就是設(shè)計(jì)用于與應(yīng)用程序通信的.它們可以發(fā)送文本,多媒體文件和特定于應(yīng)用程序的數(shù)據(jù),例如警告聲音和顯示在應(yīng)用程序圖標(biāo)上的標(biāo)記等.
八. 使用coredata有哪幾種持久化存儲(chǔ)機(jī)制
- 屬性列表
- 對(duì)象歸檔
- 數(shù)據(jù)庫(kù)存儲(chǔ)
九. 協(xié)議是什么 有什么作用
一系列方法的聲明,某個(gè)類(lèi)遵守了某個(gè)協(xié)議就擁有了該協(xié)議的所有方法的聲明.就必須實(shí)現(xiàn)協(xié)議中規(guī)定的@require的方法.
十.類(lèi)變量的@protected, @private,@public, @package聲明各有什么含義
- @public本類(lèi)\子類(lèi)\在其他類(lèi)中都能訪問(wèn)
- @protected本類(lèi)\子類(lèi)中訪問(wèn)
- @private 私有的,只有本類(lèi)中能訪問(wèn)
- @package 本包內(nèi)使用,跨包不可以.
純手動(dòng) 有地方是個(gè)人理解 有誤的地方希望大家能給指出 謝謝
大家面試中遇到的問(wèn)題 也可以留言分享
如果您喜歡 或者對(duì)您有點(diǎn)幫助 希望點(diǎn)一下喜歡 謝謝了~~