【2018年最新】 iOS面試題及答案
(1)#import指令是Object-C針對@include的改進版本,能確保引用的檔案只會被引用一次,不會陷入遞迴包含的問題中;
(2)@import與@class的區別:
#import會鏈入該標頭檔案的全部資訊,包括實體變數和方法等;二@class只是告訴編譯器,其後面宣告的名稱是類的名稱,至於這些類如何定義的,暫時不用考慮。在標頭檔案中,一般只需要知道被引用的類的名稱就可以了,不需要知道其內部的實體變數和方法,所以在標頭檔案中一般使用@class來宣告這個名稱是類的名稱;而在實現類裡面,因為會用到這個引用類的內部的實體變數和方法,所以需要使用#import類包含這個被引用類的標頭檔案。
@class還可以解決迴圈包含的問題
(3)#import<>跟#import""的區別:
#import<>用來包含系統自帶的檔案,#import""用來包含自定義的檔案
(4)屬性readwrite,readonly,assign,retain,copy,nonatomic 各是什麼作用,在那種情況下用?
• readwrite:是可讀可寫特性,同時生成get方法和set方法的宣告和實現(補充:預設屬性,將生成不帶額外引數的getter和setter方法(setterff只有一個引數))
• readonly:只讀特性,只會生成get方法的宣告和實現;不希望屬性在類外改變
• assign:是賦值特性,set方法的實現是直接賦值,用於基本資料型別;僅設定變數時
• retain:表示持有特性,set方法將傳入引數先保留,再賦值,傳入引數的retaincount會+1;
• copy:表示拷貝特性,set方法的實現是release舊值,copy新值,用於NSString、block等型別(set方法將傳入的物件複製一份;需要完全一份新的變數時使用);
• nonatomic:非原子操作,決定編譯器生成的setter getter是否是原子操作,atomic表示多執行緒安全,一般使用nonatomic