全部的內容大部分來自於網絡的蒐集,因此我不是一個創造者,而是一個搬運工。我儘可能把題目,尤爲是參考答案的出處列明。如有任何疑問,建議,意見,請聯繫我。html
第一部分面試題來源於iOS-Developer-Interview-Questions,用[◇]標示,難度是根據我本身的水平來標識的。ios
其中大部分答案來源於沒陽光的午後的三篇git
你能用到的iOS面試題(二)github
沒陽光的午後還寫了其餘不少有質量的iOS開發文章,你們能夠去學習。算法
第二部分面試題來源於微博@我就叫Sunny怎麼了的這篇博文:《招聘一個靠譜的 iOS》,其中共55題,除第一題爲糾錯題外,其餘54道均爲簡答題。用[※]標示,難度是微博@我就叫Sunny怎麼了標識的。編程
答案爲微博@iOS程序犭袁整理,未經出題者校對,若有紕漏,請向微博@iOS程序犭袁指正。swift
第三部分面試題來源於iOS程序員面試,絕對會遇到這些問題!,和第一部分有一半的重疊,由於這兩部分都是從iOS-Developer-and-Designer-Interview-Questions衍生過來的。用[◆]標示,難度是根據我本身的水平來標識的。設計模式
絕大部分是我本身給出的參考意見(或者參考連接),你們有問題能夠聯繫我,歡迎批評指正。
其餘一部分從一些同窗的整理中搬運過來,有些是重疊的,或者相似的問題,我可能就整合了。這些來自
pingui的iOS面試題,持續更新...等等,用[○]標示,難度是根據我本身的水平來標識的。
還有一部分是我本身補充的問題,用[●]標示,難度是根據我本身的水平來標識的。
Swift的內容來自這裏【面試必備】Swift 面試題及其答案, 由於我對swift不熟悉,因此僅摘錄了一部分面試題目。也沒有標識難度。今年會開始swift的學習,到時候再補充吧。
今天有發現一位大拿的博客,比我整理的還全面,你們能夠參考:
還有須要說明的是,帶[自]標記的目前暫時沒有參考答案,因此連接裏面的內容是空的,你們能夠沒必要點擊進去。
編碼規範
問題[※]: 請Review下面的代碼,並根據iOS的編碼規範作出正確的修改
版本控制
問題[◇◇]:請問您用過什麼版本控制工具?並簡述其工做流程。
問題[◇◇◇]:有沒有在 GitHub 上發佈過開源代碼,參與過開源項目?
開發工具
Xcode
Instruments
問題[◇◇◇◇]:你通常是怎麼用 Instruments 的?
問題[○○○○○]:講講你用Instrument優化動畫性能的經歷吧(若是有的話)
Xcode插件
問題[◆◆◆][自]:談一談你經常使用的開發工具都有哪些優點?
運行調試
問題[○○○]:談談iOS開發中Debug和Release的區別和使用
問題[●●●]:您是怎麼調試iOS程序的(談談您的iOS調試經驗?)
問題[◇◇◇]:若是一個函數10次中有7次正確,3次錯誤,問題可能出如今哪裏?
問題[◆◆◆]:若是在Cocoa中發現一個Bug,你會如何處理?
問題[◆◆◆]:若是應用的新版本出現了Regression的狀況,該如何補救?如何防止用戶在使用過程當中遇到新的Bug?
CocoaPods
問題[◇◇]:熟悉 CocoaPods 麼?能大概講一下工做原理麼?
關於App Store
問題[◆◆◆]:應用內購買(In-App Purchases)是怎麼回事?IAP可以爲用戶帶來哪些新體驗?
問題[◆◆]:你是否在App Store上發佈過應用?可否歸納一下過程?
問題[◆◆]:Provisioning Profiles是指?
問題[◆◆◆]:經過Ad-hoc發佈應用的話,該如何使用UUID?
Objective-C
基礎語法
關鍵字
問題[○○○]:請用預處理指令#define聲明一個常數,用以代表1年中有多少秒(忽略閏年問題)
問題[○○○]:寫一個」標準"宏MIN ,這個宏輸入兩個參數並返回較小的一個。
問題[○○]:請談談#include與#import的區別、#import與@class 的區別
問題[○○]:請分別說明@public、@protected、@private 它們的含義與做用
問題[○○○]:談談您對@synthesize、@dynamic的理解
問題[○○○]:請解釋self = [super init]方法
問題[○○]:請問常見的object-c的數據類型有那些, 和C的基本數據類型有什麼區別?如:NSInteger和int
問題[◆◆◆◆]:請說明如何使用Instancetype及其重要性。
屬性訪問
問題[※※※]:ARC下,不顯式指定任何屬性關鍵字時,默認的關鍵字都有哪些?
問題[○○○]:@property 的本質是什麼?ivar、getter、setter 是如何生成並添加到這個類中的
問題[○○]:什麼狀況使用 weak 關鍵字,相比 assign 有什麼不一樣?
問題[○○○○]:@protocol 和 category 中如何使用 @property
問題[※※※]:用@property聲明的NSString(或NSArray,NSDictionary)常用copy關鍵字,爲何?若是改用strong關鍵字,可能形成什麼問題?
問題[○○○]:這個寫法會出什麼問題: @property (copy) NSMutableArray *array;
問題[※※]:@synthesize和@dynamic分別有什麼做用?
問題[※※※]:@synthesize合成實例變量的規則是什麼?假如property名爲foo,存在一個名爲_foo的實例變量,那麼還會自動合成新變量麼?
問題[※※※※※]:在有了自動合成屬性實例變量以後,@synthesize還有哪些使用場景?
問題[◇]:如何爲 Class 定義一個對外只讀對內可讀寫的屬性?
問題[○○○]:在一個對象的方法裏面:self.name = @"object";和name =@"object";有什麼不一樣嗎?
問題[○○○]:爲何不少內置類如UITableViewController的delegate屬性都是assign而不是retain的?
問題[○○○]:請解釋一下關鍵詞的區別:assign vs weak, __block vs __weak
Block
問題[○○○]:使用block有什麼好處?使用NSTimer寫出一個使用block顯示(在UILabel上)秒錶的代碼
問題[※※]:使用block時什麼狀況會發生引用循環,如何解決?
問題[※※※]:使用系統的某些block api(如UIView的block版本寫動畫時),是否也考慮引用循環問題?
Category
問題[○○○]:重寫一個類的方式用繼承好仍是分類好? 爲何?
問題[◇◇]:iOS Extension 是什麼?能列舉幾個經常使用的 Extension 麼?
KVC/KVO
問題[※※]:addObserver:forKeyPath:options:context:各個參數的做用分別是什麼,observer中須要實現哪一個方法才能得到KVO回調?
問題[※※※]:若一個類有實例變量NSString *_foo,調用setValue:forKey:時,能夠以foo仍是_foo做爲key?
問題[※※※※]:KVC的keyPath中的集合運算符如何使用?
問題[※※※※]:KVC和KVO的keyPath必定是屬性麼?
問題[※※※※※]:如何關閉默認的KVO的默認實現,並進入自定義的KVO實現?
問題[※※※※※]:apple用什麼方式實現對一個對象的KVO?
Protocal/Delegate
問題[◇◇]:什麼是 Protocol,Delegate 通常是怎麼用的?
Notification
問題[◇◇◇]:談談NSNotification 和 KVO 的使用場景?
問題[◇◇◇◇◇]:爲何 NotificationCenter 要 removeObserver? 如何實現自動 remove?
面向對象
問題[※※]:objc中向一個nil對象發送消息將會發生什麼?
問題[※※※]:objc中向一個對象發送消息[obj foo]和objc_msgSend()函數之間有什麼關係?
問題[○○○]:爲何其餘語言裏叫函數調用,Object-C裏則叫給我對象發消息
問題[○○○○]:對於語句NSString*obj = [[NSData alloc] init]; obj在編譯時和運行時分別時什麼類型的對象?
問題[○○○]:isMemberOfClass 和 isKindOfClass 聯繫與區別
問題[※※※]:何時會報unrecognized selector的異常?
問題[※※※※]:一個objc對象的isa的指針指向什麼?有什麼做用?
問題[※※※※※]:objc中的類方法和實例方法有什麼本質區別和聯繫?
問題[※※※※※]:_objc_msgForward函數是作什麼的,直接調用它將會發生什麼?
問題[※※※※※]:可否向編譯後獲得的類中增長實例變量?可否向運行時建立的類中添加實例變量?爲何?
問題[◇◇◇◇◇]:Objective-C 中,meta-class 指的是什麼?
問題[◇◇◇]:Toll-Free Bridging 是什麼?什麼狀況下會使用?
內存管理
問題[○○○]:什麼是ARC(ARC是爲了解決什麼問題誕生的)?
問題[※※※※]:一個objc對象如何進行內存佈局?(考慮有父類的狀況)
問題[※※※※]:不手動指定autoreleasepool的前提下,一個autorealese對象在什麼時刻釋放?(好比在一個vc的viewDidLoad中建立)
問題[※※※※※]:蘋果是如何實現autoreleasepool的?
問題[○○○]:描述一個你所遇到retain cycle例子
多線程
問題[◇◇◇◇]:何時選擇NSOperation? NSOperation 相比於 GCD 有哪些優點?
問題[○○○]:Object C中建立線程的方法是什麼?若是在主線程中執行代碼,方法是什麼?若是想延時執行代碼、方法又是什麼?
問題[○○○]:有a、b、c、d 4個異步請求,如何判斷a、b、c、d都完成執行?若是須要a、b、c、d順序執行,該如何實現?
問題[※※]:GCD的隊列(dispatch_queue_t)分哪兩種類型?
問題[※※※※]:如何用GCD同步若干個異步調用?(如根據若干個url異步加載多張圖片,而後在都下載完成後合成一張整圖)
問題[※※※※]:dispatch_barrier_async的做用是什麼?
問題[※※※※※]:蘋果爲何要廢棄dispatch_get_current_queue?
Runloop
問題[○○○○]:UITableViewCell上有個UILabel,顯示NSTimer實現的秒錶時間,手指滾動cell過程當中,label是否刷新,爲何?
問題[※※※※]:以+ scheduledTimerWithTimeInterval...的方式觸發的timer,在滑動頁面上的列表時,timer會暫定回調,爲何?如何解決?
問題[◇◇◇◇]:爲何 UIScrollView 的滾動會致使 NSTimer 失效?
Runtime
問題[※※※※]:runtime如何經過selector找到對應的IMP地址?(分別考慮類方法和實例方法)
問題[※※※※]:使用runtime Associate 方法關聯的對象,須要在主對象dealloc的時候釋放麼?
問題[※※※※※]:runtime如何實現weak變量的自動置nil?
問題[○○○○○]:什麼是method swizzling?
問題[◇◇◇◇◇]:+(void)load; +(void)initialize;有什麼用處?
問題[◇◇◇◇◇]:Objective-C 如何對已有的方法,添加本身的功能代碼以實現相似記錄日誌這樣的功能?
swift
問題:對一個optional變量拆包有多少種方法?並在安全方面進行評價。
問題:泛型類,泛型結構體,泛型協議的功能特性都包含在Swift中嗎?
問題:描述一種在Swift中出現循環引用的狀況,並說明怎麼解決。
iOS
Cocoa Touch Layer
High Level Features
問題[◆◆◆]:Cocoa Touch Layer 包含什麼?不包含什麼?
問題[●●●]:什麼是UI State Preservation?
問題[●●●]:什麼是Apple Push Notification Service?
問題[●●●]:什麼是Local Notifications?
問題[●●●]:什麼是Gesture Recognizers?
問題[●●●]:什麼是Standard System View Controllers?
問題[◆◆◆]:請解釋一下Handoff是什麼,並簡述它是如何實現iOS、Mac/網頁應用互通的。
問題[◆◆◆]:iOS應用是如何實現後臺多任務處理(Multitasking)的?
問題[◇◇◇]:iOS 7的多任務添加了哪兩個新的 API? 各自的使用場景是什麼?
問題[◆◆◆]:Game Center針對iOS遊戲有哪些功能?
Cocoa Touch Frameworks
APP
基礎控件
問題[◆◆◆]:請解釋一下啓動畫面(Launch Images)。
問題[◆◆◆]:應該在什麼狀況下使用標籤、文本域和文本視圖?
問題[◆◆◆]:選取器視圖(Picker View)適合存放哪類內容?
問題[◆◆◆]:Splitview Controller是什麼?
問題[◆◆◆][自]:何時用「彈出(Popover)」屬性最爲合適?
問題[◆◆◆]:表視圖(Table View)是什麼?集合視圖(Collection View)又是什麼?
問題[◆◆◆]:選項卡(Tab Bar)和工具欄(Toolbar)分別是什麼?二者之間有何共同點和不一樣點?
問題[◆◆◆][自]:導航欄(Navigation Bar)是什麼?可否拿出你的iPhone,指出你下載的哪些應用運用了導航欄?
問題[◆◆◆]:設備狀態欄(Device Status Bar)是什麼?高度如何?是否透明?在手機通話或者導航狀態下,它是如何顯示的?
問題[○○○]:自定義實現UITabbarController的原理
View Controller
問題[◆◆◆]:Controller Life-Cycle以及View Life-cycle分別有哪些調試方法?
問題[○○○]:請談一談UIViewController的完整生命週期
問題[○○○]:ViewController 的 loadView,、viewDidLoad,、viewDidUnload 分別是在何時調用的?
問題[○○○]:push view controller 和 present view controller的區別
問題[◇◇◇◇]:哪些途徑可讓 ViewController 瘦下來?
View
問題[○○○○]:LayoutSubViews在何時被調用?
問題[○○○]:一個view已經初始化完畢,view上面添加了n個button,除用view的tag以外,還能夠採用什麼辦法來找到本身想要的button來修改button的值
問題[◇◇◇◇]:請問UIView和CALayer是什麼關係?
問題[◇◇◇◇◇]:+[UIView animateWithDuration :animations: completion:] 內部大概是如何實現的?
Tableview
問題[○○]:UITableView的數據源方法和代理方法?
問題[◇◇◇◇]:當 TableView 的 Cell 改變時,如何讓這些改變以動畫的形式呈現?
[問題[○○○○]:談談UITableViewCell是如何優化表格的?
Event
問題[◆◆◆]:請簡要描述一下UIScrollView的執行過程。它是如何響應手勢識別(Gesture Recognizer)、多點觸控(Multi-Touch)和Run Loop的?
Storybaord
問題[◆◆◆]:請描述一下Storyboard和標準NIB文件的差異。
問題[※※]:IBOutlet連出來的視圖屬性爲何能夠被設置成weak?
問題[※※※※※]:IB中User Defined Runtime Attributes如何使用?
問題[◆◆◆]:自動佈局(Auto Layout)的做用是什麼?請歸納一下它是如何運行的。
通知
問題[◇◇◇]:Push Notification 是如何工做的?
其餘
問題[◇◇◇]:iOS 的沙盒目錄結構是怎樣的? App Bundle 裏面都有什麼?
問題[○○]:將字符串「2015-04-10」格式化日期轉爲NSDate類型
問題[◇◇]:使用 NSUserDefaults 時,如何處理布爾的默認值?(好比返回 NO,不知道是真的 NO 仍是沒有設置過)
問題[◆◆◆]:請解釋一下NSUserDefaults。就你而言,你會如何在磁盤中對數組對象進行序列化?
問題[◇◇◇]:如何把一個包含自定義對象的數組序列化到磁盤?
問題[◇◇◇◇]:performSelector:withObject:afterDelay: 內部大概是怎麼實現的,有什麼注意事項麼?
問題[◆◆◆]:請描述SpriteKit和SceneKit的做用。
問題[◆◆◆]:請歸納一下你在構建iOS應用時的測試過程。iOS應用如何實現對其餘語言、日期格式以及貨幣單位的支持?
問題[◆◆]:爲何Cocoa Touch的類名稱是以兩個大寫字母開頭的?
問題[◆◆◆]:iOS是如何提升安全性,保護用戶隱私信息的?
問題[◆◆◆][自]:iPad 2,iPad mini 1-3,iPad Retina,iPad Air 2,iPhone 五、5S、6以及6+在硬件性能方面有何差別?這對注重性能的應用有何限制?
問題[◆◆◆][自]:傳感器,IO以及WiFi、撥號等鏈接方式如何在iOS平臺上運做?它們有何利用價值?請扼要地談談你的觀點。
問題[◆◆◆]:AirPlay是如何運行的?換作是你,你會如何經過編程提升應用的實用性以及演示效果?
Media Layer
問題[○○○]:Quatrz 2D的繪圖功能的三個核心概念是什麼並簡述其做用。
問題[○○○○]:如何高性能的給 UIImageView 加個圓角?
問題[◇◇◇◇◇]:爲何當 Core Animation 完成時,layer 又會恢復到原先的狀態?
問題[○○○]:iPhone OS主要提供了幾種播放音頻的方法?
問題[○○○]:使用AVAudioPlayer類調用哪一個框架、使用步驟?
問題[◆◆◆]:請歸納一下Core Audio,Core Data以及Core Location各是什麼。它們對iOS應用有何意義?
Core Services Layer
問題[◆◆◆]:VoiceOver是什麼?請舉例解釋一下iOS中的輔助功能(Accessibility)。開發者如何使用這些功能?
問題[○○○]:用過Core Data 或者 SQLite嗎?讀寫是分線程的嗎?遇到過死鎖沒?如何解決的?
問題[○○]:什麼是NSManagedobjectContext?
問題[○○○]:HTTP協議的特色,關於HTTP請求GET和POST的區別
問題[○○○]:XML數據解析方式各有什麼不一樣,JSON解析有哪些框架?
問題[○○○]:Core Foundation中提供了哪幾種操做Socket的方法?
Core OS Layer
問題[○○○]:如何製做一個靜態庫/動態庫,他們的區別是什麼?
問題[◇◇◇]:你會如何存儲用戶的一些敏感信息,如登陸的 token。
問題[◇◇◇]:Apple Pay 是什麼?它的大概工做流程是怎樣的?
數據結構與算法
架構
問題[◆◆◆]:MVC對代碼庫(Codebase)的設計有何影響?
問題[◆◆◆]:應用能夠下載並即刻顯示數據。如何根據MVC來判斷下載的最佳位置?
設計模式
問題[○○○]:單例模式的做用?程序中有哪些常見的單例?單例的實現步驟?
問題[◇◇◇◇]:若是讓你來實現dispatch_once,你會怎麼作?
問題[◆◆◆]:iOS使用的是哪些設計模式(Design Patterns)?你的代碼庫使用的是哪些設計模式?
問題[●●●●]:UIScrollVew用到了什麼設計模式?還能再foundation庫中找到相似的嗎?
問題[●●●]:簡要描述觀察者模式,並運用此模式編寫一段代碼?
問題[●●●]:使用工廠模式最主要的好處是什麼?你在哪裏使用?
第三方組件
問題[○○○○○]:ASIHttpRequest 或者 SDWebImage 裏面給 UIImageView 加載圖片的邏輯是什麼樣的?
問題[◇◇◇]:有用過一些開源組件吧,能簡單說幾個麼,大概說說它們的使用場景實現。
加密解密
問題[○○○○]:MD5和Base64的區別是什麼,各自場景是什麼?
UI設計
問題[◆◆◆]:iPhone五、六、6+以及iPad Air 2的屏幕分辨率分別是多少?
問題[◆◆◆][自]:設計iPhone和iPad應用時,應分別考慮哪些因素?
問題[◆◆◆][自]:請描述一下軟件設計中的交互和Feedback有什麼做用。
問題[◆◆◆][自]:請描述一下原型設計對於軟件開發的意義。其做用是什麼?
問題[◆◆◆]:iOS應用圖標是指什麼?請儘量詳細地描述一下。
問題[◆◆◆]:最小尺寸和最大尺寸的應用圖標分別是什麼樣子的?
問題[◆◆◆]:Newsstand的圖標與常規應用有何不一樣?
綜合題
問題[◇◇◇◇]:設計一個能夠無限滾動而且支持自動滾動的 SlideShow
問題[◇◇◇◇]:設計一套大文件(如上百M的視頻)下載方案。
問題[◇◇◇◇]:設計一個相似 iOS 主屏能夠下拉出現 Spotlight 的系統。
其餘
問題[◇◇◇]:今年你最想掌握的一門技術是什麼?爲何?目前已經作到了哪一個程度?
問題[◆◆◆][自]:你最愛以哪一種方式來檢驗一項新技術是否好用?
問題[◆◆◆][自]:你以爲Xcode有哪些須要改進的地方?
問題[◆◆◆][自]:最近有沒有開發什麼好玩的東西?你最引覺得豪的做品是什麼?
問題[◆◆◆][自]:你最敬佩的獨立Mac或者iOS應用開發者是誰?
問題[◆◆◆][自]:請歸納一下你對軟件受權的理解,及其對軟件開發的影響。
問題[◆◆◆][自]:你認爲iOS須要添加或改進哪些API?