(1)#import指令是Object-C針對@include的改進(jìn)版本,能確保引用的文件只會被引用一次蓄氧,不會陷入遞歸包含的問題中函似;
(2)@import與@class的區(qū)別:
? ? #import會鏈入該頭文件的全部信息,包括實(shí)體變量和方法等喉童;二@class只是告訴編譯器撇寞,其后面聲明的名稱是類的名稱,至于這些類如何定義的堂氯,暫時不用考慮蔑担。在頭文件中,一般只需要知道被引用的類的名稱就可以了咽白,不需要知道其內(nèi)部的實(shí)體變量和方法啤握,所以在頭文件中一般使用@class來聲明這個名稱是類的名稱;而在實(shí)現(xiàn)類里面晶框,因?yàn)闀玫竭@個引用類的內(nèi)部的實(shí)體變量和方法排抬,所以需要使用#import類包含這個被引用類的頭文件。
@class還可以解決循環(huán)包含的問題
(3)#import<>跟#import""的區(qū)別:
#import<>用來包含系統(tǒng)自帶的文件授段,#import""用來包含自定義的文件
(4)屬性readwrite蹲蒲,readonly,assign侵贵,retain届搁,copy,nonatomic 各是什么作用窍育,在那種情況下用卡睦?
? readwrite:是可讀可寫特性,同時生成get方法和set方法的聲明和實(shí)現(xiàn)(補(bǔ)充:默認(rèn)屬性漱抓,將生成不帶額外參數(shù)的getter和setter方法(setterff只有一個參數(shù)))
? readonly:只讀特性表锻,只會生成get方法的聲明和實(shí)現(xiàn);不希望屬性在類外改變
? assign:是賦值特性乞娄,set方法的實(shí)現(xiàn)是直接賦值瞬逊,用于基本數(shù)據(jù)類型檐迟;僅設(shè)置變量時
? retain:表示持有特性,set方法將傳入?yún)?shù)先保留码耐,再賦值,傳入?yún)?shù)的retaincount會+1溶其;
? copy:表示拷貝特性骚腥,set方法的實(shí)現(xiàn)是release舊值,copy新值瓶逃,用于NSString束铭、block等類型(set方法將傳入的對象復(fù)制一份;需要完全一份新的變量時使用)厢绝;
? nonatomic:非原子操作契沫,決定編譯器生成的setter getter是否是原子操作,atomic表示多線程安全昔汉,一般使用nonatomic