屬性與實例變量的區(qū)別:
屬性無法直接訪問對象的內(nèi)部狀態(tài),但提供了訪問這類數(shù)據(jù)的的方便機制
1.屬性聲明
語法:
@property (特性) 屬性類型 屬性名稱;
作用:
聲明會設(shè)置與屬性關(guān)聯(lián)的getter/setter方法的特性,但無法生成真正的方法定義
特性:

2.屬性定義
????????包括:getter方法和setter方法的定義,實例變量的聲明,并在getter/setter方法中使用這個實例變量
定義屬性的方式:
????a.顯示定義:
????????getter/setter方法必須遵循其命名規(guī)則,實例變量應(yīng)該遵循其命名慣例
????b.通過關(guān)鍵字補全:
????????語法:@synthesize 屬性名稱 [= 實例變量名稱];
????????說明:[= 實例變量名稱]為可選項。
????????????若缺省,則編譯器根據(jù)命名慣例自動生成實例變量名稱,否則,編譯器使用該實例變量名稱。
????c.動態(tài)生成
????略
????d.自動補全
????????編譯器可以自動補全以下已聲明的屬性:
????????????1).沒有使用關(guān)鍵字補全的屬性
????????????2).不是動態(tài)生成的屬性
????????????3).沒有用戶編寫getter和setter方法的屬性
3.由屬性支持的實例變量
? ??命名慣例:實例變量的名稱是屬性名稱前加下劃線
4.屬性的訪問/設(shè)置
? ??兩種機制:訪問器/設(shè)置器方法,點語法。
????????a.訪問器/設(shè)置器方法:
????????????訪問器:與屬性名稱相同。
????????????設(shè)置器:名稱以set開頭,后跟首字母大寫的屬性名。
????????b.點語法:
????????????myobject.屬性的名稱。 實際上是調(diào)用訪問器方法。
????????????myobject.屬性的名稱 = 輸入值。 實際上是調(diào)用設(shè)置器方法。
????????注:若含有屬性對象還沒有完全創(chuàng)建好,就不要使用這些機制,而是(在內(nèi)部)使用實例變量。
附:atomic的意思就是setter/getter這個函數(shù)是一個原語操作。如果有多個線程同時調(diào)用setter的話,不會出現(xiàn)某一個線程執(zhí)行setter全部語句之前,另一個線程開始執(zhí)行setter情況,相當(dāng)于函數(shù)頭尾加了鎖一樣。 nonatomic不保證setter/getter的原語行,所以你可能會取到不完整的東西。 比如setter函數(shù)里面改變兩個成員變量,如果你用nonatomic的話,getter可能會取到只更改了其中一個變量時候的狀態(tài)。
atomic是線程安全的,nonatomic是線程不安全的。如果只是單線程操作的話用nonatomic最好,因為后者效率高一些。