3月1日面試(知春路一小公司)由淺入深
1.應(yīng)用程序的生命周期。
有storyboard情況下:
1.main函數(shù)
2.UIApplicationMain
* 創(chuàng)建UIApplication對(duì)象
* 創(chuàng)建UIApplication的delegate對(duì)象
3.根據(jù)Info.plist獲得最主要storyboard的文件名,加載最主要的storyboard(有storyboard)
* 創(chuàng)建UIWindow
* 創(chuàng)建和設(shè)置UIWindow的rootViewController
* 顯示窗口
沒有storyboard情況下:
1.main函數(shù)
2.UIApplicationMain
* 創(chuàng)建UIApplication對(duì)象
* 創(chuàng)建UIApplication的delegate對(duì)象
3.delegate對(duì)象開始處理(監(jiān)聽)系統(tǒng)事件(沒有storyboard)
* 程序啟動(dòng)完畢的時(shí)候, 就會(huì)調(diào)用代理的application:didFinishLaunchingWithOptions:方法
* 在application:didFinishLaunchingWithOptions:中創(chuàng)建UIWindow
* 創(chuàng)建和設(shè)置UIWindow的rootViewController
* 顯示窗口
2.@property()各種屬性
3.深拷貝與淺拷貝
淺拷貝只拷貝指針,不會(huì)產(chǎn)生新的對(duì)象;深拷貝是內(nèi)容拷貝,產(chǎn)生了新的對(duì)象。
4.runloop
NSRunLoop是IOS消息機(jī)制的處理模式
>1.NSRunLoop的主要作用:控制NSRunLoop里面線程的執(zhí)行和休眠,在有事情做的時(shí)候使當(dāng)前NSRunLoop控制的線程工作,沒有事情做讓當(dāng)前NSRunLoop的控制的線程休眠。
>2.NSRunLoop 就是一直在循環(huán)檢測,從線程start到線程end,檢測inputsource(如點(diǎn)擊,雙擊等操作)異步事件,檢測timesource同步事件,檢測到輸入源會(huì)執(zhí)行處理函數(shù),首先會(huì)產(chǎn)生通知,corefunction向線程添加runloop observers來監(jiān)聽事件,意在監(jiān)聽事件發(fā)生時(shí)來做處理。
>3.runloopmode是一個(gè)集合,包括監(jiān)聽:事件源,定時(shí)器,以及需通知的runloop observers
>1. 只有在為你的程序創(chuàng)建次線程的時(shí)候,才需要運(yùn)行run loop。對(duì)于程序的主線程而言,run loop是關(guān)鍵部分。Cocoa提供了運(yùn)行主線程run loop的代碼同時(shí)也會(huì)自動(dòng)運(yùn)行run loop。IOS程序UIApplication中的run方法在程序正常啟動(dòng)的時(shí)候就會(huì)啟動(dòng)run loop。如果你使用xcode提供的模板創(chuàng)建的程序,那你永遠(yuǎn)不需要自己去啟動(dòng)run loop
>2. 在多線程中,你需要判斷是否需要run loop。如果需要run loop,那么你要負(fù)責(zé)配置run loop并啟動(dòng)。你不需要在任何情況下都去啟動(dòng)run loop。比如,你使用線程去處理一個(gè)預(yù)先定義好的耗時(shí)極長的任務(wù)時(shí),你就可以毋需啟動(dòng)run loop。Run loop只在你要和線程有交互時(shí)才需要
5.gcd
6.runtime runtime怎么添加屬性方法
運(yùn)行時(shí)機(jī)制,runtime庫里面包含了跟類、成員變量、方法相關(guān)的API,比如獲取類里面的所有成員變量,為類動(dòng)態(tài)添加成員變量,動(dòng)態(tài)改變類的方法實(shí)現(xiàn),為類動(dòng)態(tài)添加新的方法等?需要導(dǎo)入
1.runtime,運(yùn)行時(shí)機(jī)制,它是一套C語言庫
2.實(shí)際上我們編寫的所有OC代碼,最終都是轉(zhuǎn)成了runtime庫的東西,比如類轉(zhuǎn)成了runtime庫里面的結(jié)構(gòu)體等數(shù)據(jù)類型,方法轉(zhuǎn)成了runtime庫里面的C語言函數(shù),平時(shí)調(diào)方法都是轉(zhuǎn)成了objc_msgSend函數(shù)(所以說OC有個(gè)消息發(fā)送機(jī)制)
3.因此,可以說runtime是OC的底層實(shí)現(xiàn),是OC的幕后執(zhí)行者
4.有了runtime庫,能做什么事情呢?runtime庫里面包含了跟類、成員變量、方法相關(guān)的API,比如獲取類里面的所有成員變量,為類動(dòng)態(tài)添加成員變量,動(dòng)態(tài)改變類的方法實(shí)現(xiàn),為類動(dòng)態(tài)添加新的方法等
5.因此,有了runtime,想怎么改就怎么改
7.數(shù)據(jù)本地化的幾種方式(NSUserDefaufts,歸檔反歸檔,數(shù)據(jù)庫,writeToFile)
8.堆和棧的區(qū)別
1.堆空間的內(nèi)存是動(dòng)態(tài)分配的,一般存放對(duì)象,并且需要手動(dòng)釋放內(nèi)存
2.??臻g的內(nèi)存由系統(tǒng)自動(dòng)分配,一般存放局部變量等,不需要手動(dòng)管理內(nèi)存
category和extension區(qū)別