#import 跟#include、@class有什么區別?#import<> 跟 #import”"又什么區別?屬性readwrite,readonly,assign,retain,copy,nonatomic 各是什么作用,在那種情況下用?

(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

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容