iOS 程式員面試要注意的問題
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),就應該產生一個單件執行個體,而不是多個執行個體;如果將來某一天可能有多個執行個體,您可
以使用單件執行個體機制,而不是Factory 方法或函數。
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、線程和進程的區別?
進程和線程都是由作業系統所體會的程式啟動並執行基本單元,系統利用該基本單元實現系統對應用的並發性。
進程和線程的主要差別在於它們是不同的作業系統資源管理方式。進程有獨立的地址空間,一個進程崩潰後,在保護模式下不會對其它進程產生影響,而線程只是一個 進程中的不同執行路徑。線程有自己的堆棧和局部變數,但線程之間沒有單獨的地址空間,一個線程死掉就等於整個進程死掉,所以多進程的程式要比多線程的程式 健壯,但在進程切換時,耗費資源較大,效率要差一些。但對於一些要求同時進行並且又要共用某些變數的並行作業,只能用線程,不能用進程。
7、Object-C的記憶體管理?
1.當你使用new,alloc和copy方法建立一個對象時,該對象的保留計數器值為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