(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