使用屬性時還有乙個問題要注意,就是其各種特質(attribute)設定也會影響編譯器所生成的訪問方法。比如下面這個屬性就指定了三項特質:
1 @property (nonatomic, readwrite, copy) nsstring *testfirstname;
屬性可以擁有的特質分為四類:
在預設情況下,由編譯器所合成的方法會通過鎖定機制確保其原子性(atomicity)(在併發程式設計中,如果某操作具備整體性,也就是說,系統其他部分無法觀察到其中間步驟所生成的臨時結果,而只能看到操作前與操作後的結果,那麼該操作就是「原子的」(atomic),或者說,該操作具備「原子性」(atomicity))。如果屬性具備 nonatomic 特質,則不使用同步鎖。請注意,儘管沒有名為「atomic」的特質(如果某屬性不具備 nonatomic 特質,那它就是「原子的」(atomic)),但是仍然可以在屬性特質中寫明這一點,編譯器不會報錯。若是自己定義訪問方法,那麼就應該遵從與屬性特質相符的原子性。
屬性用於封裝資料,而資料則要有「具體的所有權語義」(concrete ownership semantic)。下面這一組特質僅會影響「設定方法」 。例如,用「設定方法」設定乙個新值時,它是應該「保留」(retain)此值呢,還是只將其賦值給底層例項變數就好?編譯器在合成訪問方法時,要根據此特質來決定所生成的方法,那麼就必須同有關屬性所具備的特質相符。
end
理解「屬性」這一概念
要理解好 屬性 這一概念,我覺得需要把以下幾個問題弄明白 1 例項變數與public protected private 2 例項變數的繼承性 3 屬性擺放的位置,比如宣告檔案 實現檔案 匿名分類宣告檔案等 4 屬性與例項變數的關係 5 使用屬性還是使用例項變數 6 屬性與setter getter...
第八條 理解「物件等同性」這一概念
isequaltostring 比isequal 快,因為後者還要之行額外的步驟,因為它不知道受檢測的物件型別。nsobject協議中有連個用於判斷等同性的關鍵方法 bool isequal id object nsuinterger hash 要點 若想檢測物件的等同性,請提供 isequal 於...
iOS理解「物件等同性」這一概念
前言 最近看了一道題 nsstring s1 hello world nsstring s2 hello world 請問 s1 s2的返回值是yes還是no?相信很多童鞋的答案都是no,可能大家認為s1 s2兩個物件的位址不同,但是事實真的如此麼?為此特意寫了乙個demo來印證下 import i...