面試經(jīng)典面;試題

1.你使用過Objective-C的運(yùn)行時(shí)編程(Runtime Programming)么?如果使用過,你用它做了什么?你還能記得你所使用的相關(guān)的頭文件或者某些方法的名稱嗎?

Objecitve-C的重要特性是Runtime(運(yùn)行時(shí)),在#import

下能看到相關(guān)的方法,用過objc_getClass()和class_copyMethodList()獲取過私有API;使用

Method method1 =

class_getInstanceMethod(cls, sel1);

Method method2 =

class_getInstanceMethod(cls, sel2);

method_exchangeImplementations(method1,

method2);

代碼交換兩個(gè)方法,在寫unit test時(shí)使用到。

2.你實(shí)現(xiàn)過多線程的Core Data么?NSPersistentStoreCoordinator,NSManagedObjectContext和NSManagedObject中的哪些需要在線程中創(chuàng)建或者傳遞?你是用什么樣的策略來實(shí)現(xiàn)的?

沒實(shí)現(xiàn)過多線程的CoreData(待實(shí)踐)


3.Core開頭的系列的內(nèi)容。是否使用過CoreAnimation和CoreGraphics。UI框架和CA,CG框架的聯(lián)系是什么?分別用CA和CG做過些什么動(dòng)畫或者圖像上的內(nèi)容。(有需要的話還可以涉及Quartz的一些內(nèi)容)

UI框架的底層有CoreAnimation,CoreAnimation的底層有CoreGraphics。

UIKit |

------------ |

Core Animation |

Core Graphics |

Graphics Hardware|

使用CA做過menu菜單的展開收起(太遜了)

4.是否使用過CoreText或者CoreImage等?如果使用過,請(qǐng)談?wù)勀闶褂肅oreText或者CoreImage的體驗(yàn)。

CoreText可以解決復(fù)雜文字內(nèi)容排版問題。CoreImage可以處理圖片,為其添加各種效果。體驗(yàn)是很強(qiáng)大,挺復(fù)雜的。

5.NSNotification和KVO的區(qū)別和用法是什么?什么時(shí)候應(yīng)該使用通知,什么時(shí)候應(yīng)該使用KVO,它們的實(shí)現(xiàn)上有什么區(qū)別嗎?如果用protocol和delegate(或者delegate的Array)來實(shí)現(xiàn)類似的功能可能嗎?如果可能,會(huì)有什么潛在的問題?如果不能,為什么?(雖然protocol和delegate這種東西面試已經(jīng)面爛了…)

NSNotification是通知模式在iOS的實(shí)現(xiàn),KVO的全稱是鍵值觀察(Key-value

observing),其是基于KVC(key-value coding)的,KVC是一個(gè)通過屬性名訪問屬性變量的機(jī)制。例如將Module層的變化,通知到多個(gè)Controller對(duì)象時(shí),可以使用NSNotification;如果是只需要觀察某個(gè)對(duì)象的某個(gè)屬性,可以使用KVO。

對(duì)于委托模式,在設(shè)計(jì)模式中是對(duì)象適配器模式,其是delegate是指向某個(gè)對(duì)象的,這是一對(duì)一的關(guān)系,而在通知模式中,往往是一對(duì)多的關(guān)系。委托模式,從技術(shù)上可以現(xiàn)在改變delegate指向的對(duì)象,但不建議這樣做,會(huì)讓人迷惑,如果一個(gè)delegate對(duì)象不斷改變,指向不同的對(duì)象。

6.你用過NSOperationQueue么?如果用過或者了解的話,你為什么要使用NSOperationQueue,實(shí)現(xiàn)了什么?請(qǐng)描述它和GCD的區(qū)別和類似的地方(提示:可以從兩者的實(shí)現(xiàn)機(jī)制和適用范圍來描述)。

使用NSOperationQueue用來管理子類化的NSOperation對(duì)象,控制其線程并發(fā)數(shù)目。GCD和NSOperation都可以實(shí)現(xiàn)對(duì)線程的管理,區(qū)別是NSOperation和NSOperationQueue是多線程的面向?qū)ο蟪橄?。?xiàng)目中使用NSOperation的優(yōu)點(diǎn)是NSOperation是對(duì)線程的高度抽象,在項(xiàng)目中使用它,會(huì)使項(xiàng)目的程序結(jié)構(gòu)更好,子類化NSOperation的設(shè)計(jì)思路,是具有面向?qū)ο蟮膬?yōu)點(diǎn)(復(fù)用、封裝),使得實(shí)現(xiàn)是多線程支持,而接口簡(jiǎn)單,建議在復(fù)雜項(xiàng)目中使用。

項(xiàng)目中使用GCD的優(yōu)點(diǎn)是GCD本身非常簡(jiǎn)單、易用,對(duì)于不復(fù)雜的多線程操作,會(huì)節(jié)省代碼量,而Block參數(shù)的使用,會(huì)是代碼更為易讀,建議在簡(jiǎn)單項(xiàng)目中使用。

更詳細(xì)的答案見我的這篇文章

7.既然提到GCD,那么問一下在使用GCD以及block時(shí)要注意些什么?它們兩是一回事兒么?block在ARC中和傳統(tǒng)的MRC中的行為和用法有沒有什么區(qū)別,需要注意些什么?如何避免循環(huán)引用?

使用block是要注意,若將block做函數(shù)參數(shù)時(shí),需要把它放到最后,GCD是Grand Central Dispatch,是一個(gè)對(duì)線程開源類庫,而Block是閉包,是能夠讀取其他函數(shù)內(nèi)部變量的函數(shù)。更詳細(xì)的答案見我的這篇文章

8.您是否做過異步的網(wǎng)絡(luò)處理和通訊方面的工作?如果有,能具體介紹一些實(shí)現(xiàn)策略么?


9.對(duì)于Objective-C,你認(rèn)為它最大的優(yōu)點(diǎn)和最大的不足是什么?對(duì)于不足之處,現(xiàn)在有沒有可用的方法繞過這些不足來實(shí)現(xiàn)需求。如果可以的話,你有沒有考慮或者實(shí)踐過重新實(shí)現(xiàn)OC的一些功能,如果有,具體會(huì)如何做?

最大的優(yōu)點(diǎn)是它的運(yùn)行時(shí)特性,不足是沒有命名空間,對(duì)于命名沖突,可以使用長(zhǎng)命名法或特殊前綴解決,如果是引入的第三方庫之間的命名沖突,可以使用link命令及flag解決沖突。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • *面試心聲:其實(shí)這些題本人都沒怎么背,但是在上海 兩周半 面了大約10家 收到差不多3個(gè)offer,總結(jié)起來就是把...
    Dove_iOS閱讀 27,602評(píng)論 30 472
  • 1.Difference between shallow copy and deep copy? 淺復(fù)制和深復(fù)制的...
    用心在飛閱讀 1,069評(píng)論 0 9
  • Object C中創(chuàng)建線程的方法是什么?如果在主線程中執(zhí)行代碼,方法是什么?如果想延時(shí)執(zhí)行代碼、方法又是什么? 1...
    AlanGe閱讀 1,913評(píng)論 0 17
  • 01 “寶貝兒,你真棒!” 前些年,賞識(shí)教育興起的時(shí)候,滿大街的爸爸媽媽,爺爺奶奶都愛對(duì)孩子說這話。好像這是一句點(diǎn)...
    安心小屋閱讀 394評(píng)論 0 0
  • 如果你能, 從希望的夢(mèng)里走來, 我會(huì)給你沏一杯清茶, 讓那靈魂的香味隨著茗煙, 彌漫成流光溢彩的愛情海。 如果你能...
    愛上一葉浮萍閱讀 203評(píng)論 6 9

友情鏈接更多精彩內(nèi)容