iOS屬性

屬性與實例變量的區(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最好,因為后者效率高一些。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
禁止轉(zhuǎn)載,如需轉(zhuǎn)載請通過簡信或評論聯(lián)系作者。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容