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

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

   答案:UIBackgroundTaskIdentifier


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

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


3.autoreleasepool工作機制

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


4.通過dsym分析崩潰日誌

   答案:可以分析出代碼出現問題的代碼,在周圍尋找可疑處即https://developer.apple.com/library/ios/technotes/tn2151/_index.html


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事件等。

http://www.cnblogs.com/zhidao-chen/archive/2013/03/21/2973329.html

http://stackoverflow.com/questions/12091212/understanding-nsrunloop


7.屏幕點擊時間的傳遞順序

   答案:從根視圖開始,以遞歸的形式逐漸向上尋找可以處理該事件的view,響應則是從該返回的view開始,逐漸向後尋找可以處理該點擊時間的viewhttp://smnh.me/hit-testing-in-ios/


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

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

http://blog.csdn.net/totogo2010/article/details/8048652 


9.cell的重用機制:

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


10.簡要介紹coreData:

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


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

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

http://stackoverflow.com/questions/1352479/tricks-for-improving-iphone-uitableview-scrolling-performance


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

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

http://stackoverflow.com/questions/11511548/best-way-to-cache-images-on-ios-app 


13.設計模式相關問題

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

 http://blog.csdn.net/xdrt81y/article/details/12128721


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

    答案:見下圖


15.請簡單介紹運行時

    答案:因爲OC是一門動態語言,所以可以講一個對象需要調用的方法決定的時刻從編譯時改到運行時,通過這個特性,我們可以實現消息在運行時間段的增加,修改,交換,轉發等。

http://stackoverflow.com/questions/19314135/ios-runtime-use-case

http://www.justinyan.me/post/1624

http://stackoverflow.com/questions/13645666/objective-c-dynamic-properties-at-runtime/13646650#13646650


16.UIView和CALayer的關係和差別

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

http://stackoverflow.com/questions/7826306/what-are-the-differences-between-a-uiview-and-a-calayer


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

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

http://zhidao.baidu.com/link?url=6AMo1uLinyf5oG3X0UO3dYvweRKZ__3CtLDSQC3hPOJIttJ7oYCOZObwo85bWW9mKpW8LdKhhwSkFynhgHR1UJhI_45HWd4q_BXzLo3qMhO  


18.爲什麼要使用__Bridge

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


19.ARC在什麼情況下會產生內存泄露?

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







發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章