iOS面試題03-Foundation(★★★)

2018 iOS面試題系列

一、KVO內(nèi)部實(shí)現(xiàn)原理
  • KVO是基于runtime機(jī)制實(shí)現(xiàn)的
  • 當(dāng)某個(gè)類的對象第一次被觀察時(shí)湖员,系統(tǒng)就會在運(yùn)行期動態(tài)地創(chuàng)建該類的一個(gè)派生類,在這個(gè)派生類中重寫基類中任何被觀察屬性的setter 方法吱型。派生類在被重寫的 setter 方法實(shí)現(xiàn)真正的通知機(jī)制(Person->NSKVONotifying_Person)

二 、 是 否 可 以 把 比 較 耗 時(shí) 的 操 作 放 在NSNotificationCenter中

如果在異步線程發(fā)的通知,那么可以執(zhí)行比較耗時(shí)的操作弥锄;
如果在主線程發(fā)的通知沼侣,那么就不可以執(zhí)行比較耗時(shí)的操作


三祖能、Foundation對象與 Core Foundation對象有什么區(qū)別

1>Foundation對象是OC的,Core Foundation對象是C對象
2> 數(shù)據(jù)類型之間的轉(zhuǎn)換
· ARC:__bridge_retained蛾洛、__bridge_transfer
· 非ARC: __bridge


四养铸、不用中間變量,用兩種方法交換 A和 B的值
A=A + B
B=A - B
A=A - B
或者

A=A^B;
B=A^B;
A=A^B;

五、簡單描述下對單利模式設(shè)計(jì)的理解轧膘?

節(jié)省內(nèi)存資源钞螟,一個(gè)應(yīng)用就一個(gè)對象。


六谎碍、什么是動態(tài)鳞滨,舉例說明

在程序運(yùn)行過程才執(zhí)行的操作


七、runtime實(shí)現(xiàn)的機(jī)制是什么,怎么用蟆淀,一般用于干嘛. 你還能記得你所使用的相關(guān)的頭文件或者某些方法的名稱嗎拯啦?

運(yùn)行時(shí)機(jī)制澡匪,runtime庫里面包含了跟類、成員變量褒链、方法相關(guān)的API唁情,比如獲取類里面的所有成員變量,為類動態(tài)添加成員變量甫匹,動態(tài)改變類的方法實(shí)現(xiàn)荠瘪,為類動態(tài)添加新的方法等 需要導(dǎo)入<objc/message.h><objc/runtime.h> runtime,運(yùn)行時(shí)機(jī)制赛惩,它是一套C語言庫哀墓。 實(shí)際上我們編寫的所有OC代碼,最終都是轉(zhuǎn)成了runtime庫的東西喷兼,比如類轉(zhuǎn)成了runtime庫里面的結(jié)構(gòu)體等數(shù)據(jù)類型篮绰,方法轉(zhuǎn)成了runtime庫里面的C語言函數(shù),平時(shí)調(diào)方法都是轉(zhuǎn)成了objc_msgSend函數(shù)(所以說OC有個(gè)消息發(fā)送機(jī)制)因此季惯,可以說runtime是OC的底層實(shí)現(xiàn)吠各,是OC的幕后執(zhí)行者。有了runtime庫勉抓,能做什么事情呢贾漏?runtime庫里面包含了跟類、成員變量藕筋、方法相關(guān)的API纵散,比如獲取類里面的所有成員變量,為類動態(tài)添加成員變量隐圾,動態(tài)改變類的方法實(shí)現(xiàn)伍掀,為類動態(tài)添加新的方法等。因此暇藏,有了runtime蜜笤,想怎么改就怎么改


八、是否使用 Core Text或者 Core Image等盐碱?如果使用過把兔,請談?wù)勀闶褂?CoreText或者 CoreImage的體驗(yàn)。

CoreText

  • 隨意修改文本的樣式
  • 圖文混排(純C語言)
  • 國外:Niumb

Core Image(濾鏡處理)

  • 能調(diào)節(jié)圖片的各種屬性(對比度, 色溫, 色差等)

九瓮顽、NSNotification和 KVO的區(qū)別和用法是什么县好?什么時(shí)候應(yīng)該使用通知,什么時(shí)候應(yīng)該使用KVO趣倾,它們的實(shí)現(xiàn)上有什么區(qū)別嗎聘惦?如果用protocol和delegate(或者delegate的Array)來實(shí)現(xiàn)類似的功能可能嗎某饰?如果可能儒恋,會有什么潛在的問題善绎?如果不能,為什么诫尽?(雖然 protocol和 delegate這種東西面試已經(jīng)面爛了…)

NSNotification是通知模式在iOS的實(shí)現(xiàn)禀酱,KVO的全稱是鍵值觀察(Key-value observing),其是基于KVC(key-value coding)的,KVC是一個(gè)通過屬性名訪問屬性變量的機(jī)制牧嫉。例如將Module層的變化剂跟,通知到多個(gè)Controller對象時(shí),可以使用NSNotification酣藻;如果是只需要觀察某個(gè)對象的某個(gè)屬性曹洽,可以使用KVO。
對于委托模式辽剧,在設(shè)計(jì)模式中是對象適配器模式送淆,其是delegate是指向某個(gè)對象的,這是一對一的關(guān)系怕轿,而在通知模式中偷崩,往往是一對多的關(guān)系。委托模式撞羽,從技術(shù)上可以現(xiàn)在改變delegate指向的對象阐斜,但不建議這樣做,會讓人迷惑诀紊,如果一個(gè)delegate對象不斷改變谒出,指向不同的對象。


十邻奠、Block內(nèi)部的實(shí)現(xiàn)原理

Objective-C是對C語言的擴(kuò)展到推,block的實(shí)現(xiàn)是基于指針和函數(shù)指針

iOS - 揭露Block的內(nèi)部實(shí)現(xiàn)原理


十一、使用 protocol時(shí)惕澎,聲明一組可選擇實(shí)現(xiàn)與否的函數(shù)莉测,需要在聲明的前一行加上

@Optional


十二、怎樣防止指針的越界使用問題?

必須讓指針指向一個(gè)有效的內(nèi)存地址, 1唧喉、防止數(shù)組越界2捣卤、防止向一塊內(nèi)存中拷貝過多的內(nèi)容3、防止使用空指針4八孝、防止改變 const 修改的指針5董朝、防止改變指向靜態(tài)存儲區(qū)的內(nèi)容6、防止兩次釋放一個(gè)指針7干跛、防止使用野指針.


十三子姜、談?wù)?webView的作用

webview與運(yùn)維成本低, 更新幾乎不依賴App的版本


十四楼入、What is purpose of delegates? 代理的作用哥捕?

代理的目的是改變或傳遞控制鏈牧抽。允許一個(gè)類在某些特定時(shí)刻通知到其他類,而不需要獲取到那些類的指針遥赚⊙锸妫可以減少框架復(fù)雜度。 另外一點(diǎn)凫佛,代理可以理解為 java中的回調(diào)監(jiān)聽機(jī)制的一種類似


十五讲坎、What are mutable and immutable types in Objective C? obc中可修改和不可以修改類型。

可修改不可修改的集合類愧薛。這個(gè)我個(gè)人簡單理解就是可動態(tài)添加修改和不可動態(tài)添加修改一樣晨炕。比如 NSArray 和 NSMutableArray。前者在初始化后的內(nèi)存控件就是固定不可變的毫炉,后者可以添加等府瞄,可以動態(tài)申請新的內(nèi)存空間。


十六碘箍、When we call objective c is runtimelanguage what does it mean? 我們說的 obc是動態(tài)運(yùn)行時(shí)語言是什么意思遵馆?

多態(tài)。 主要是將數(shù)據(jù)類型的確定由編譯時(shí)丰榴,推遲到了運(yùn)行時(shí)货邓。這個(gè)問題其實(shí)淺涉及到兩個(gè)概念,運(yùn)行時(shí)和多態(tài)四濒。簡單來說换况,運(yùn)行時(shí)機(jī)制使我們直到運(yùn)行時(shí)才去決定一個(gè)對象的類別,以及調(diào)用該類別對象指定方法盗蟆。 多態(tài):不同對象以自己的方式響應(yīng)相同的消息的能力叫做多態(tài)戈二。意思就是假設(shè)生物類(life)都用有一個(gè)相同的方法-eat; 那人類屬于生物,豬也屬于生物喳资,都繼承了 life 后觉吭,實(shí)現(xiàn)各自的 eat,但是調(diào)用是我們只需調(diào)用各自的 eat 方法仆邓。也就是不同的對象以自己的方式響應(yīng)了相同的消息(響應(yīng)了 eat 這個(gè)選擇器)鲜滩。 因此也可以說,運(yùn)行時(shí)機(jī)制是多態(tài)的基礎(chǔ).


十七节值、Polymorphism徙硅?關(guān)于多態(tài)性

多態(tài),子類指針可以賦值給父類搞疗。父類指針指向子類指針嗓蘑。
多態(tài)是具有表現(xiàn)多種形態(tài)的能力的特征,是為了避免在父類里大量重載引起代碼臃腫且難于維護(hù)。繼承是子類使用父類的方法桩皿,而多態(tài)則是父類使用子類中重寫父類的方法


十八條豌汇、obj-c有私有方法么?私有變量呢?

在 Objective-C 中沒有私有方法,只有靜態(tài)方法和實(shí)例方法业簿。但是可以用@private修飾私有變量。


十九條阳懂、什么是鍵-值,鍵路徑是什么梅尤?

模型的性質(zhì)是通過一個(gè)簡單的鍵(通常是個(gè)字符串)來指定的。視圖和控制器通過鍵來查找相應(yīng)的屬性值岩调。在一個(gè)給定的實(shí)體中巷燥,同一個(gè)屬性的所有值具有相同的數(shù)據(jù)類型。鍵-值編碼技術(shù)用于進(jìn)行這樣的查找—它是一種間接訪問對象屬性的機(jī)制号枕。鍵路徑是一個(gè)由用點(diǎn)作分隔符的鍵組成的字符串缰揪,用于指定一個(gè)連接在一起的對象性質(zhì)序列。第一個(gè)鍵的性質(zhì)是由先前的性質(zhì)決定的葱淳,接下來每個(gè)鍵的值也是相對于其前面的性質(zhì)钝腺。鍵路徑使您可以以獨(dú)立于模型實(shí)現(xiàn)的方式指定相關(guān)對象的性質(zhì)。通過鍵路徑赞厕,您可以指定對象圖中的一個(gè)任意深度的路徑艳狐,使其指向相關(guān)對象的特定屬性.


二十、c和 obj-c如何混用

1)obj-c 的編譯器處理后綴為 m 的文件時(shí)皿桑,可以識別 obj-c 和 c 的代碼毫目,處理 mm文件可以識別 obj-c,c,c++代碼,但 cpp 文件必須只能用 c/c++代碼诲侮,而且 cpp 文件include 的頭文件中镀虐,也不能出現(xiàn) obj- c 的代碼,因?yàn)?cpp 只是 cpp 2) 在 mm 文件中混用 cpp 直接使用即可沟绪,所以 obj-c 混 cpp 不是問題 3)在 cpp 中混用 obj- c其實(shí)就是使用 obj-c 編寫的模塊是我們想要的刮便。 如果模塊以類實(shí)現(xiàn),那么要按照cpp class 的標(biāo)準(zhǔn)寫類的定義绽慈,頭文件中不能出現(xiàn) obj-c 的東西诺核,包括#import cocoa的。實(shí)現(xiàn)文件中久信,即類的實(shí)現(xiàn)代碼中可以使用 obj-c 的東西窖杀,可以 import,只是后綴是 mm。 如果模塊以函數(shù)實(shí)現(xiàn)裙士,那么頭文件要按 c 的格式聲明函數(shù)入客,實(shí)現(xiàn)文件中,c++函數(shù)內(nèi)部可以用 obj-c,但后綴還是 mm 或 m桌硫。 總結(jié):只要 cpp 文件和 cpp include 的文件中不包含 obj-c 的東西就可以用了夭咬,cpp 混用 obj-c 的關(guān)鍵是使用接口,而不能直接使用實(shí)現(xiàn)代碼铆隘,實(shí)際上 cpp 混用的是 obj-c 編譯后的 o 文件卓舵,這個(gè)東西其實(shí)是無差別的,所以可以用膀钠。obj-c 的編譯器支持 cpp.


二十一掏湾、淺拷貝和深拷貝區(qū)別是什么

在有指針的情況下,淺拷貝只是增加了一個(gè)指針指向已經(jīng)存在的內(nèi)存肿嘲,而深拷貝就是增加一個(gè)指針并且申請一個(gè)新的內(nèi)存融击,使這個(gè)增加的指針指向這個(gè)新的內(nèi)存,采用深拷貝的情況下雳窟,釋放內(nèi)存的時(shí)候就不會出現(xiàn)在淺拷貝時(shí)重復(fù)釋放同一內(nèi)存的錯(cuò)誤


二十二尊浪、Object-C有多繼承嗎?沒有的話用什么代替封救?cocoa 中所有的類都是 NSObject 的子類

Object-C沒有多繼承
多繼承在這里是用 protocol 委托代理 來實(shí)現(xiàn)的拇涤。不用去考慮繁瑣的多繼承 ,虛基類的概念.ood 的多態(tài)特性 在 obj-c 中通過委托來實(shí)現(xiàn).


二十二、在 Xcode中誉结,需要編譯混合 Objective-C和 C++的源碼文件工育,需要將文件格式的后綴改為()

.mm


二十三、在 Objective-C聲明一個(gè)類所要用到的編譯指令是 ()

@interface someClass


二十四搓彻、使用 Xcode創(chuàng)建工程時(shí)如绸,支持同時(shí)創(chuàng)建的版本管理庫是

git


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市旭贬,隨后出現(xiàn)的幾起案子怔接,更是在濱河造成了極大的恐慌,老刑警劉巖稀轨,帶你破解...
    沈念sama閱讀 206,968評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件扼脐,死亡現(xiàn)場離奇詭異,居然都是意外死亡奋刽,警方通過查閱死者的電腦和手機(jī)瓦侮,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來佣谐,“玉大人肚吏,你說我怎么就攤上這事∠粱辏” “怎么了罚攀?”我有些...
    開封第一講書人閱讀 153,220評論 0 344
  • 文/不壞的土叔 我叫張陵党觅,是天一觀的道長。 經(jīng)常有香客問我斋泄,道長杯瞻,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,416評論 1 279
  • 正文 為了忘掉前任炫掐,我火速辦了婚禮魁莉,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘募胃。我一直安慰自己旗唁,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,425評論 5 374
  • 文/花漫 我一把揭開白布摔认。 她就那樣靜靜地躺著逆皮,像睡著了一般宅粥。 火紅的嫁衣襯著肌膚如雪参袱。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,144評論 1 285
  • 那天秽梅,我揣著相機(jī)與錄音抹蚀,去河邊找鬼。 笑死企垦,一個(gè)胖子當(dāng)著我的面吹牛环壤,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播钞诡,決...
    沈念sama閱讀 38,432評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼郑现,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了荧降?” 一聲冷哼從身側(cè)響起接箫,我...
    開封第一講書人閱讀 37,088評論 0 261
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎朵诫,沒想到半個(gè)月后辛友,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,586評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡剪返,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,028評論 2 325
  • 正文 我和宋清朗相戀三年废累,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片脱盲。...
    茶點(diǎn)故事閱讀 38,137評論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡邑滨,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出钱反,到底是詐尸還是另有隱情驼修,我是刑警寧澤殿遂,帶...
    沈念sama閱讀 33,783評論 4 324
  • 正文 年R本政府宣布,位于F島的核電站乙各,受9級特大地震影響墨礁,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜耳峦,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,343評論 3 307
  • 文/蒙蒙 一恩静、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧蹲坷,春花似錦驶乾、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,333評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至县匠,卻和暖如春风科,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背乞旦。 一陣腳步聲響...
    開封第一講書人閱讀 31,559評論 1 262
  • 我被黑心中介騙來泰國打工贼穆, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人兰粉。 一個(gè)月前我還...
    沈念sama閱讀 45,595評論 2 355
  • 正文 我出身青樓故痊,卻偏偏與公主長得像,于是被迫代替她去往敵國和親玖姑。 傳聞我的和親對象是個(gè)殘疾皇子愕秫,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,901評論 2 345

推薦閱讀更多精彩內(nèi)容

  • *面試心聲:其實(shí)這些題本人都沒怎么背,但是在上海 兩周半 面了大約10家 收到差不多3個(gè)offer,總結(jié)起來就是把...
    Dove_iOS閱讀 27,125評論 29 470
  • 注:此文章來源:Job_Yang 的簡書 1. Object-c的類可以多重繼承么?可以實(shí)現(xiàn)多個(gè)接口么?Categ...
    廣益散人閱讀 1,344評論 0 13
  • 歲月仿佛過去了很久 久到想不起來曾經(jīng)的模樣 歲月又仿佛經(jīng)歷了很多 多到一時(shí)想不起來曾經(jīng)的悲喜 歲月又太快 快到來不...
    田萍閱讀 155評論 0 1
  • 很久之前就要寫些東西了戴甩,我不是專業(yè)的,與其說是寫作倒不如說是記錄舔琅,只想把自己的青春記錄下來等恐,去享受去回憶,也希望...
    健少閱讀 279評論 0 0
  • 近來有關(guān)心教育但反對讀經(jīng)教育的人士提出假想:如果讓孔子來讀現(xiàn)在的人民日報(bào)备蚓,孔子能讀得懂嗎课蔬? 不言而喻,一定是讀不懂...
    耘心閱讀 1,000評論 2 3