- 請解釋以下代碼是什么意思:
typedef __attribute__((NSObject)) CGGradientRef GradientObject;
@property (nonatomic, strong) GradientObject storedGradient;
2.NSNtification和KVO的區(qū)別和用法是什么?什么時候該使用通知莺禁,什么時候應(yīng)該使用KVO留量,它們的實現(xiàn)上有什么區(qū)別嗎?如果用protocol和delegate(或者delegate的Array)來實現(xiàn)類似的功能可能嗎哟冬?如果可能楼熄,會有什么潛在的問題?如果不能浩峡,為什么可岂?
NSNotification是通知模式在iOS的實現(xiàn),KVO的全稱是鍵值觀察(Key-value observing),其是基于KVC(key-value coding)的翰灾,KVC是一個通過屬性名訪問屬性變量的機(jī)制缕粹。例如將Model層的變化,通知到多個Controller對象時纸淮,可以使用NSNotification平斩;如果是只需要觀察某個對象的某個屬性,可以使用KVO咽块。
對于委托代理模式绘面,在設(shè)計模式中是對象適配器模式,其是delegate是指向某個對象的,這是一對一的關(guān)系揭璃,而在通知模式中晚凿,往往是一對多的關(guān)系。委托代理模式塘辅,從技術(shù)上可以現(xiàn)在改變delegate指向的對象,但不建議這樣做皆撩,會讓人迷惑扣墩,如果一個delegate對象不斷改變,指向不同的對象扛吞。
3.應(yīng)用的多線程方式是什么呻惕,能熟練的列舉出以往開發(fā)工作中的多線程處理場景?
資料1
4.iOS開發(fā)過程中的安全機(jī)制有哪些滥比,列舉出亚脆,在項目開發(fā)中用過嗎?用過的話請列舉出來盲泛。
資料1
5.Core開頭的系列的內(nèi)容濒持,是否使用過CoreAnimation和CoreGraphics,UI框架和CA寺滚,CG框架的聯(lián)系是什么柑营?分別用CA和CG做過什么動畫或者圖像上的內(nèi)容。
6.數(shù)據(jù)持久化有哪些操作村视,在你的項目中有沒有應(yīng)用過官套,說一下應(yīng)用場景。
7.使用過Objective-C的運(yùn)行時編程(RunTime Programing)蚁孔?如果使用過奶赔,你用它做了什么?你還能記得你所使用的相關(guān)頭文件或者某些方法的名稱嗎杠氢?
Objecitve-C的重要特性是Runtime(運(yùn)行時),在#import <objc/runtime.h> 下能看到相關(guān)的方法站刑,用過objc_getClass()和class_copyMethodList()獲取過私有API;使用
Method method1 = class_getInstanceMethod(cls, sel1);
Method method2 = class_getInstanceMethod(cls, sel2);
method_exchangeImplementations(method1, method2);
代碼交換兩個方法,在寫unit test時使用到鼻百。
8.有過運(yùn)動類應(yīng)用的開發(fā)經(jīng)驗嗎笛钝,說一下HealthKit類庫及運(yùn)動協(xié)處理器。
9.應(yīng)對項目中的bug你是怎么處理的愕宋,請簡述下crash日志分析玻靡;
10.自己封裝過SDK嗎?封裝過的話請說出封裝SDK的類型中贝,封裝原理囤捻。
- 是否使用過CoreText或者CoreImage等?如果使用過邻寿,請談?wù)勀闶褂肅oreText或者CoreImage的體驗蝎土。
CoreText可以解決復(fù)雜文字內(nèi)容排版問題视哑。CoreImage可以處理圖片,為其添加各種效果誊涯。體驗是很強(qiáng)大挡毅,挺復(fù)雜的。
- 你用過NSOperationQueue么暴构?如果用過或者了解的話跪呈,你為什么要使用NSOperationQueue,實現(xiàn)了什么取逾?請描述它和GCD的區(qū)別和類似的地方(提示:可以從兩者的實現(xiàn)機(jī)制和適用范圍來描述)耗绿。
使用NSOperationQueue用來管理子類化的NSOperation對象,控制其線程并發(fā)數(shù)目砾隅。GCD和NSOperation都可以實現(xiàn)對線程的管理误阻,區(qū)別是 NSOperation和NSOperationQueue是多線程的面向?qū)ο蟪橄蟆m椖恐惺褂肗SOperation的優(yōu)點是NSOperation是對線程的高度抽象晴埂,在項目中使用它究反,會使項目的程序結(jié)構(gòu)更好,子類化NSOperation的設(shè)計思路儒洛,是具有面向?qū)ο蟮膬?yōu)點(復(fù)用奴紧、封裝),使得實現(xiàn)是多線程支持晶丘,而接口簡單黍氮,建議在復(fù)雜項目中使用。
項目中使用GCD的優(yōu)點是GCD本身非常簡單浅浮、易用沫浆,對于不復(fù)雜的多線程操作,會節(jié)省代碼量滚秩,而Block參數(shù)的使用专执,會是代碼更為易讀,建議在簡單項目中使用郁油。 - 既然提到GCD本股,那么問一下在使用GCD以及block時要注意些什么当窗?它們兩是一回事兒么夹纫?block在ARC中和傳統(tǒng)的MRC中的行為和用法有沒有什么區(qū)別,需要注意些什么矢渊?如何避免循環(huán)引用案站?
使用block是要注意躬审,若將block做函數(shù)參數(shù)時,需要把它放到最后,GCD是Grand Central Dispatch承边,是一個對線程開源類庫遭殉,而Block是閉包,是能夠讀取其他函數(shù)內(nèi)部變量的函數(shù)博助。 - 您是否做過異步的網(wǎng)絡(luò)處理和通訊方面的工作险污?如果有,能具體介紹一些實現(xiàn)策略么富岳?
使用NSOperation發(fā)送異步網(wǎng)絡(luò)請求蛔糯,使用NSOperationQueue管理線程數(shù)目及優(yōu)先級,底層是用NSURLConnetion城瞎,詳細(xì)可見開源框架LWConnetion渤闷。 - 對于Objective-C疾瓮,你認(rèn)為它最大的優(yōu)點和最大的不足是什么脖镀?對于不足之處,現(xiàn)在有沒有可用的方法繞過這些不足來實現(xiàn)需求狼电。如果可以的話蜒灰,你有沒有考慮或者實踐過重新實現(xiàn)OC的一些功能,如果有肩碟,具體會如何做强窖?
最大的優(yōu)點是它的運(yùn)行時特性,不足是沒有命名空間削祈,對于命名沖突翅溺,可以使用長命名法或特殊前綴解決,如果是引入的第三方庫之間的命名沖突髓抑,可以使用link命令及flag解決沖突咙崎。 - 你實現(xiàn)過一個框架或者庫以供別人使用么?如果有吨拍,請談一談構(gòu)建框架或者庫時候的經(jīng)驗褪猛;如果沒有,請設(shè)想和設(shè)計框架的public的API羹饰,并指出大概需要如何做伊滋、需要注意一些什么方面,來使別人容易地使用你的框架队秩。
抽象和封裝笑旺,方便使用。首先是對問題有充分的了解馍资,比如構(gòu)建一個文件解壓壓縮框架燥撞,從使用者的角度出發(fā),只需關(guān)注發(fā)送給框架一個解壓請求,框架完成復(fù)雜文件的解壓操作物舒,并且在適當(dāng)?shù)臅r候通知給是哦難過者色洞,如解壓完成、解壓出錯等冠胯。在框架內(nèi)部去構(gòu)建對象的關(guān)系火诸,通過抽象讓其更為健壯、便于更改荠察。其次是API的說明文檔置蜀。