1. 程式人生 > >【2018年最新】 iOS面試題及答案

【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