1. 程式人生 > >iOS開發工程師常見面試題及答案

iOS開發工程師常見面試題及答案

1.申請後臺執行除了後臺重新整理和VoIP及音樂播放和定位之外還有什麼辦法?

   答案:UIBackgroundTaskIdentifier

2.使用GCD在當前程式碼中加入幾個NSLog列印,請寫出打印出的順序

   答案:用XCode跑一下便知,一會補充上答案

3.autoreleasepool工作機制

   答案:通過autoreleasepoolPage來決定是否對所有使用了autorelease的變數執行一次releasehttp://www.tuicool.com/articles/3aqmqy

4.通過dsym分析崩潰日誌

5.iOS8的適配

   答案:1)有一些被廢棄的API,包括UIApplication中用來註冊推送的API使用新的API來代替了;UIViewController中用來獲取當前螢幕方向的API和屬性被size classes和traits替代;UISearchDisplayController被UISearchController替代。

              2)CLLocationManager的方法改變,在請求地理資訊之前必須要詢問使用者是否准許;

              3)UITableViewCell層級改變,從三層變回兩層;

              4)UIActionSheet和UIAlertView升級,加入block屬性;

6.簡單介紹NSRunLoop

    答案:是一個事件處理迴圈,處理當系統收到一個輸入源傳入的時間時便會執行,否則則不會執行,並且負責調配執行緒。輸入源包括螢幕點選事件,讀寫時間,timer事件等。

7.螢幕點選時間的傳遞順序

   答案:從根檢視開始,以遞迴的形式逐漸向上尋找可以處理該事件的view,響應則是從該返回的view開始,逐漸向後尋找可以處理該點選時間的view

http://smnh.me/hit-testing-in-ios/

8.iOS的生命週期及對應的方法

   答案:Inactive , active, background, suspended. 對應的方法則是AppDelegate中的那些方法

9.cell的重用機制:

   答案:在tableView中有一個屬性是reuseCells,從其中獲取可以重用的cell即可,如果沒有則新生成。如果在一個tableview中只有一種cell的話,則記憶體中只有螢幕顯示的cell數+1個cell.

10.簡要介紹coreData:

    答案:主要介紹明白以下三種屬性Managed Object Model這是資料庫的表; Persistent Store Coordinator這是一個數據庫連線; Managed Object Context 這可以是認為一個數據庫操作的畫板,幾乎所有的資料庫操作都要通過它來進行。

11.提高tableView的效能,既提高滾動時的順滑度

    答案:請看stackOverflow上的一個高分答案

12.如何對圖片進行快取(和11題可以一起問)

    答案:使用NSCache等。目前流行的圖片下載及快取框架SDImageView也是使用NSCache來快取圖片的

13.設計模式相關問題

    答案:設計模式可以單獨寫成一本書,我們主要了解OC中使用的設計模式,具體Cocoa Touch中使用了什麼樣的設計模式我一會補充上

14.排序演算法及相關的時間空間複雜度

    答案:見下圖

15.請簡單介紹執行時

    答案:因為OC是一門動態語言,所以可以講一個物件需要呼叫的方法決定的時刻從編譯時改到執行時,通過這個特性,我們可以實現訊息在執行時間段的增加,修改,交換,轉發等。


16.UIView和CALayer的關係和差別

     答案:CALayer用來展示,而UIView用來繪製。其中最大的差別是UIView可以相應事件,而CALayer不可以。


17.GC(Gabbage collection) ARC 和MRC的關係

    答案:GC是java的垃圾回收機制,在系統認為需要回收的時候對那些物件進行一次統一的回收。而MRC使用引用計數機制,當引用計數為0時對物件進行釋放,ARC是在編譯的時候為物件加入相應地release等操作。

18.為什麼要使用__Bridge

     答案:因為我們在使用GC的物件時,無法對其進行像NS的物件一樣的記憶體管理。需要通過一個bridge來讓系統對其進行管理。(這個標誌只會在ARC中出現,MRC中不會)

19.ARC在什麼情況下會產生記憶體洩露?

    答案:在迴圈引用時,具體包括:block中引用了self, timer中對其接受者進行了retain, delegate沒有釋放代理, iboutlets的修飾符為strong等。