說明:題目在前,答案在后。希望大家看到題目的時候先思考一下答案,不要依賴答案,如果覺得答案不夠具體,一定要上度娘找到自己滿意的答案。代碼要經常敲,題目要經常思考。如有錯誤,敬請雅正。
注意:每天我會推出10道面試題目,貴精不貴多,和大家一起進步。
題目:
1.視圖控制器的生命周期?
2.什么是block?
3.UITableView的復用機制?
4.UIView和CALayer之間的關系?
5.什么是同步和異步下載?
6.coreData和FMDB哪個效率高?
7.常見的http請求類型?
8.ios多線程的框架?
9.如何保證線程安全?
10.如果AFNetworking不能使用了,你會使用什么第三方庫框架替代它?
以下是答案:
1.視圖控制器的生命周期
alloc init(執行一次)
loadView(執行一次)
viewDIdload (執行一次)
viewWillAppearr(可執行多次)
viewDidAppearr(可執行多次)
viewWillDisAppear(可執行多次)
viewDidDsAppear(可執行多次)
viewDidUnload(執行一次)
dealloc(執行一次)
2.什么是block
(1)概念 :在ios中,blocks是對象,它封裝了一段代碼,這段代碼可以在任何時候執行。blocks可以作為函數參數或者函數的返回值,而其本身又可以帶輸入參數或返回值,簡單來說就是代碼塊或者說是代碼片段。
(2)應用場景:多用于反向傳值
(3)注意事項:
<1>MRC下的block分為三種:
_NSConcretStackBlock 棧block
_NSConcretGlobalBlock 全局block
_NSConcretMallocBlock 堆block
<2>block為什么要用copy修飾符
為了保證block對象不被提前釋放,如果對_NSConcretStackBlock使用copy消息,則會把block對象拷貝到堆上,如果_NSConcretGlobalBlock發送copy消息,則什么事都沒做,若果對_NSConcretMallocBlock進行copy消息,則引用計數+1。
3.UITableView的復用機制
每一個UITableView都會維護一個復用隊列(reuseIdentifyQueue),里面存放著已經被移除出屏幕的UitableViewCell對象,當需要新的cell出現到屏幕上的時候,就需要到對用隊列當中尋找同種類型的cell出來復用,這個隊列內部可以存放各種不同類型的cell,查找的時候,根據復用標識(reuseIdentify)進行區分。
4.UIView和CALayer之間的關系
UIView是CALayer的一個載體,UIView顯示的部分,都是由CALayer來負責的,其實UIView最重要的功能不是用于顯示內容,它主要作用是用于管理它所渲染區域的內部的各種事件, UIView是繼承自UIResponder,所以它可以響應事件。
5.什么是同步和異步下載
(1) 同步下載(請求):[NSString alloc] initWithContentsOfUrl [NSData alloc] initWithContentsOfUrl,UI界面會卡死(阻塞)。
原因:因為同步下載是單線程操作,實際上是在主線程當中進行下載操作,由于一個線程同時只能執行一個工作,所以就沒有空閑去刷新UI了。
(2)異步下載(請求):多線程操作,開啟一個子線程去執行下載任務,當下載任務執行完畢之后,再通知主線程刷新UI。
幾種回到由子線程回到主線程的方法
(1)、- (void)performSelectorOnMainThread:(SEL)aSelector withObject:(id)arg waitUntilDone:(BOOL)wait;
(2)、[[NSOperationQueue mainQueue] addOperationWithBlock:nil];
(3)、dispatch_async(dispatch_get_main_queue(), ^{
})
6.coreData和FMDB哪個效率高
運行效率:coreData高于FMDB
查詢效率:FMDB高于coreData
底層使用到的數據庫類型;SQLite
特殊情況:coreData只能使用SQLite這個數據庫類型來進行持久化儲存么?否,XML文件,plist文件等等.
7.常見的http請求類型
get,post,put,delete 查、改、增、刪。
IOS9默認需要使用https請求,ATS
https比http更安全
8.ios多線程的框架
(1)NSTheard:線程
(2)NSOperation:線程池,主要是操作隊列,主隊列(主線程) 子隊列(子線程) NSOperation 是對GCD 一個封裝 要解決GCD的一些遺留問題
(3)GCD 偉大的調度中心 主要是操作隊列 主隊列 子隊列 GCD一旦開啟一個子線程,就無法停止
9.如何保證線程安全
線程鎖、 [NSLock lock]
信號量self(標志位),如果信號量已經存在,則該線程鎖正在使用當中,其他線程無法進入鎖內代碼
@synchronized(self){}
static dispatch_once_t one;
dispatch_once(&one, ^{
});
10.如果AFNetworking不能使用了,你會使用什么第三方庫框架替代它
(1)MKNetWork. 比較輕量級,簡單易用。
(2)ASIHttpRequest,原作者已經停止更新,但是因為在IOS6.0以前,它是最流行的第三方請求框架,一些公司依然自行維護著。