iOS面試題目2

說明:題目在前,答案在后。希望大家看到題目的時候先思考一下答案,不要依賴答案,如果覺得答案不夠具體,一定要上度娘找到自己滿意的答案。代碼要經常敲,題目要經常思考。如有錯誤,敬請雅正。

注意:每天我會推出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以前,它是最流行的第三方請求框架,一些公司依然自行維護著。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • *面試心聲:其實這些題本人都沒怎么背,但是在上海 兩周半 面了大約10家 收到差不多3個offer,總結起來就是把...
    Dove_iOS閱讀 27,212評論 30 472
  • 之前看了很多面試題,感覺要不是不夠就是過于冗余,于是我將網上的一些面試題進行了刪減和重排,現在分享給大家。(題...
    Job_Yang閱讀 12,111評論 12 143
  • 注:此文章來源:Job_Yang 的簡書 1. Object-c的類可以多重繼承么?可以實現多個接口么?Categ...
    廣益散人閱讀 1,360評論 0 13
  • 咖啡冥想:有一天剛剛吃過午飯,店里來了一位阿姨,她問:姑娘,要雞蛋不?正好前一天剛買了幾十個雞蛋回來,于是就跟阿姨...
    rainlove2011閱讀 132評論 0 0
  • 對生活的掌控感被摧毀地輕而易舉的感覺 今天健身了 看了書 和男朋友聊天還不錯 哎 明天會好的!
    rrreason閱讀 230評論 0 0