高級ios工程師面試題_ios高級工程師面試題
ISO高級工程師在求職面試中,想要的到面試官的肯定,那么做好面試準備,了解面試題很有必要。下面小編已經為你們整理了高級ios工程師面試題,希望可以幫到你。
高級ios工程師面試題(一)
1. 怎么修改只讀(readonly)屬性變量
使用KVC可以修改 kvc就是鍵值編碼(key-value),可以通過指定的key獲得想要的值value,而不是通過調用 Setter,Getter 方法訪問
2.KVO 除了能觀察屬性外,能不能觀察對象
不能觀察對象
KVO,即 Key-Value Observing, 它提供一種機制,當指定的對象的屬性被修改后,則對象就會接受到通知。簡單的說就是每次指定的被觀察者的對象的屬性被修改后,KVO就會自動通知相應的觀察者了
KVO是一個對象能過觀察另外一個對象的屬性的值,并且能夠發現值的變化。這是一個對象與另一個對象保持同步的一種方法,即當另一種對象的狀態發生改變時,觀察對象馬上做出反應。它只能用來對屬性做出反應,而不會用來對方法或者動作做出反應。
實現原理:當為某個對象屬性注冊監聽的時候,該對象的 isa 指針就會指向一個中間類,而不是本來對象真實的類。所以說,對象的 isa 指針可以改變,我們的程序最好不要依賴 isa 指針。
簡言而之就是:
1.當一個 object 有觀察者時沒動態創建這個 object 的類的子類
2.對于每一個被觀察的 property, 重寫其 set 方法
3.在重寫的 set 方法中調用- willChangeValueForKey:和- didChangeValueForKey:通知觀察者
4.當一個 property 沒有觀察者時,刪除重寫方法
5.當一個 boserver 觀察任何一個 property 時,刪除動態創建的子類
3.block里面能不能修改靜態變量
能 __block 可以 ---> 為什么要用__block
你可以指定引入一個變量為可更改的,即讀-寫的,通過應用__block存儲類型修改修飾符。
局部變量的__block的存儲和register,auto,static等存儲類型相似,但它們之間不兼容。
__block 變量保存在變量共享的作用域范圍內,所有的 blocks 和 block 副本都聲明或創建在和變量的作用于相同范圍內。所以,如果任何 blocks 副本聲明在棧內并未超出棧的結束時,該存儲會讓棧幀免于被破壞(比如封裝為以后執行)。同一作用域范圍內給定的多個 block 可以同時使用一個共享變量作為一種優化, block 存儲在棧上面,就像blocks本身一樣。如果使用 Block_copy 拷貝了 block 得一個副本(或者在 objective-C里面給 block 發送了一條 copy 消息),變量會被拷貝到堆上面。所以一個__ block 變量的地址可以隨時間推移而更改。
使用 __block的變量有兩個限制:
1.它們不能是可變長的數組
2.它們不能是包含有 C99可變瘡毒的數組變量的數據結構
高級ios工程師面試題(二)
1.你使用過Objective-C的運行時編程(Runtime Programming)么?如果使用過,你用它做了什么?你還能記得你所使用的相關的頭文件或者某些方法的名稱嗎?
2.你實現過多線程的Core Data么?NSPersistentStoreCoordinator,NSManagedObjectContext和NSManagedObject中的哪些需要在線程中創建或者傳遞?你是用什么樣的策略來實現的?
3.Core開頭的系列的內容。是否使用過CoreAnimation和CoreGraphics。UI框架和CA,CG框架的聯系是什么?分別用CA和CG做過些什么動畫或者圖像上的內容。(有需要的話還可以涉及Quartz的一些內容)
4.是否使用過CoreText或者CoreImage等?如果使用過,請談談你使用CoreText或者CoreImage的體驗。
5.NSNotification和KVO的區別和用法是什么?什么時候應該使用通知,什么時候應該使用KVO,它們的實現上有什么區別嗎?如果用protocol和delegate(或者delegate的Array)來實現類似的功能可能嗎?如果可能,會有什么潛在的問題?如果不能,為什么?(雖然protocol和delegate這種東西面試已經面爛了…)
6.你用過NSOperationQueue么?如果用過或者了解的話,你為什么要使用NSOperationQueue,實現了什么?請描述它和G.C.D的區別和類似的地方(提示:可以從兩者的實現機制和適用范圍來描述)。
7.既然提到G.C.D,那么問一下在使用G.C.D以及block時要注意些什么?它們兩是一回事兒么?block在ARC中和傳統的MRC中的行為和用法有沒有什么區別,需要注意些什么?
8.您是否做過異步的網絡處理和通訊方面的工作?如果有,能具體介紹一些實現策略么?
9.對于objective-c,你認為它最大的優點和最大的不足是什么?對于不足之處,現在有沒有可用的方法繞過這些不足來實現需求。如果可以的話,你有沒有考慮或者實踐過重新實現OC的一些功能,如果有,具體會如何做?
10.你實現過一個框架或者庫以供別人使用么?如果有,請談一談構建框架或者庫時候的經驗;如果沒有,請設想和設計框架的public的API,并指出大概需要如何做、需要注意一些什么方面,來使別人容易地使用你的框架。
高級ios工程師面試題(三)
1.寫一下UIButton與UITableView的層級結構
2.Cocoa的Foundation對象與Core Foundation對象通過什么關鍵字進行轉換?這些關鍵字有什么區別?
3.KVO是什么?內部是怎么實現的?
4.是否可以把比較耗時的操作放在NSNotificationCenter中處理?為什么?應該如何處理?
5.利用NSOperation與NSOperationQueue處理多線程時,有3個NSOperation分別為A,B,C,要求A,B執行完之后,才執行C,如何做?
6.在非ARC中,可以對哪些對象加上autorelease關鍵字,它的作用是什么?被autorelease修飾的對象什么時候釋放?
7詳細說明一下App啟動過程,從main文件開始說起.main中有什么函數,幾個參數,作用是什么?
8C高級ios工程師面試題nimation是做什么的?寫一下它的層級結構(主要是寫下其各種子類)?
9.iOS7之前,后臺執行內容有幾種形式,都是什么?
10.一個有序的序列M,判斷其中是否有兩個元素A,B的和為K?如何判斷三個元素的A,B,C的和為K呢?
看了“高級ios工程師面試題”