iOS程式設計師面試要注意的幾個問題~

乞力馬紮羅的雪CYF發表於2015-09-22
1自動釋放池是什麼,如何工作?

當您向一個物件傳送一個autorelease訊息時,Cocoa就會將該物件的一個引用放入到最新的自動釋放池。它仍然是個正當的物件,因此自動釋放池定義的作用域內的其它物件可以向它傳送訊息。當程式執行到作用域結束的位置時,自動釋放池就會被釋放,池中的所有物件也就被釋放。

2說一說static 關鍵字

(1)函式體內 static 變數的作用範圍為該函式體,不同於 auto 變數,該變數的記憶體只被分配一次, 因此其值在下次呼叫時仍維持上次的值;

(2)在模組內的 static 全域性變數可以被模組內所用函式訪問,但不能被模組外其它函式訪問;

(3)在模組內的 static 函式只可被這一模組內的其它函式呼叫,這個函式的使用範圍被限制在宣告它的模組內;

(4)在類中的 static 成員變數屬於整個類所擁有,對類的所有物件只有一份拷貝;

(5)在類中的 static 成員函式屬於整個類所擁有,這個函式不接收 this 指標,因而只能訪問類的static 成員變數。

3什麼是單件例項

Foundation 和 Application Kit 框架中的一些類只允許建立單件物件,即這些類在當前程式中的唯一例項。

舉例來說,NSFileManager 和NSWorkspace 類在使用時都是基於程式進行單件物件的例項化。當向這些類請求例項的時候,它們會向您傳遞單一例項的一個引用,如果該例項還不存在,則首先進行例項的分配和初始化。單件物件充當控制中心的角色,負責指引或協調類的各種服務。

如果類在概念上只有一個例項(比如NSWorkspace),就應該產生一個單件例項,而不是多個例項;如果將來某一天可能有多個例項,您可 以使用單件例項機制,而不是工廠方法或函式。

4說說Objective-C有哪些優點和不足

objc優點:

1) Cateogies
2) Posing
3) 動態識別
4) 指標計算
5)彈性訊息傳遞
6) 不是一個過度複雜的 C 衍生語言
7) Objective-C 與 C++ 可混合程式設計

不足:
1) 不支援名稱空間
2) 不支援運算子過載
3)不支援多重繼承
4)使用動態執行時型別,所有的方法都是函式呼叫,所以很多編譯時優化方法都用不到。(如行內函數等),效能低劣。

5#import和#include的區別,@class代表什麼?

@class一般用於標頭檔案中需要宣告該類的某個例項變數的時候用到,在m檔案中還是需要使用#import;

而#import比起#include的好處就是不會引起重複包含。

6執行緒和程式的區別?

程式和執行緒都是由作業系統所體會的程式執行的基本單元,系統利用該基本單元實現系統對應用的併發性。

程式和執行緒的主要差別在於它們是不同的作業系統資源管理方式。程式有獨立的地址空間,一個程式崩潰後,在保護模式下不會對其它程式產生影響,而執行緒只是一個程式中的不同執行路徑。

執行緒有自己的堆疊和區域性變數,但執行緒之間沒有單獨的地址空間,一個執行緒死掉就等於整個程式死掉,所以多程式的程式要比多執行緒的程式健壯,但在程式切換時,耗費資源較大,效率要差一些。但對於一些要求同時進行並且又要共享某些變數的併發操作,只能用執行緒,不能用程式。

7Object-C的記憶體管理?

(1)當你使用new,alloc,copy,mutableCopy方法建立一個物件時,該物件的保留計數器值為1.當你不再使用該物件時,你要負責向該物件傳送一條release或autorelease訊息.這樣,該物件將在使用壽命結束時被銷燬.

(2)當你通過任何其他方法獲得一個物件時,則假設該物件的保留計數器值為1,而且已經被設定為自動釋放,你不需要執行任何操作來確保該物件被清理.如果你打算在一段時間內擁有該物件,則需要保留它並確保在操作完成時釋放它.

(3)如果你保留了某個物件,你需要(最終)釋放或自動釋放該物件.必須保持retain方法和release方法的使用次數相等.

8各種屬性的用法

屬性readwrite,readonly,assign,retain,copy,nonatomic 各是什麼作用,在哪種情況下用?

readwrite 是可讀可寫特性,需要生成getter方法和setter方法時;

readonly 是隻讀特性,只會生成getter方法,不會生成setter方法,不希望屬性在類外改變;

assign 是賦值特性,setter方法將傳入引數賦值給例項變數,僅設定變數時;

retain 表示持有特性,setter方法將傳入引數先保留,再賦值,傳入引數的retaincount會+1;

copy 表示賦值特性,setter方法將傳入物件複製一份,需要完全一份新的變數時;

nonatomic 非原子操作,決定編譯器生成的setter getter是否是原子操作,atomic表示多執行緒安全,一般使用nonatomic。

原文連結:http://www.itjhwd.com/ioscxymsyzywt/




github主頁:https://github.com/chenyufeng1991  。歡迎大家訪問!

相關文章