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