屬性,Property,點語法

2021-06-23 04:31:47 字數 2366 閱讀 4911

屬性是oc2.0之後出來的新的語法, 用來替代setter和getter方法, 使用屬性可以快速建立setter和getter方法的宣告, setter和getter的實現, 另外還新增了對例項變數操作的安全處理

@property (nonatomic, retain) nsstring *name;//暫時為retain

@property (nonatomic, retain) nsstring *genter;//暫時為retain

@property (nonatomic) nsinteger age;

@property (nonatomic) cgfloat height;

@property (nonatomic) cgfloat weight;

@property用來定義屬性, nsstring *屬性的型別(和例項型別名相同)name屬性名(和例項變數名相同)

切記:@property只是自動宣告setter以及getter方法宣告

屬性的特性:

1 讀寫特性:

1)readonly:告訴編譯器, 屬性在自動生成方法時只會生成getter方法, 不會生成setter方法

2)readwrite:告訴編譯器, 屬性在自動生成方法時即會生成getter方法, 也會生成setter方法,系統預設的讀寫特性

3)setter = aa 告訴編譯器, 屬性在自動生成setter方法時,setter方法的方法名為指定的aa, 不採用預設的

4)gettter = bb 告訴編譯器, 屬性在自動生成getter方法時,getter方法的方法名為指定的bb, 不採用預設的

2 原子性特性:

1)nonatomic:非原子性, 不保證執行緒安全

因為對於setter以及getter方法的使用, 比較繁瑣, 在一段時間內可能多次訪問, 所以使用atomic會非常消耗系統的資源, 降低程式的執行效率, 使用nonatomic雖然不保證執行緒安全, 但是使用一般情況下都是安全的, 所以對於原子特性, 使用nonatomic

2)atomic:原子特性, 保證執行緒安全, 內部做了安全處理(加鎖與解鎖)

3 語義特性

1)assign:直接賦值, 使用針對於基本資料型別, 也可針對於物件型別, 系統預設的語義特性

2)copy:針對於物件型別, 並且要服從nscopying協議的物件才可以, 會複製出乙個新的物件, 擁有新的物件所有權, (引用計數+1)(先暫時這麼理解)

3)retain:針對於物件型別, 會造成物件的引用計數+1;

setter 方法的作用:為單一的例項變數賦值;

setter 方法規範寫法:-號方法, 無返回值, 名字以set開頭 + 要設定的變數的例項變數名(首字母大寫) :(setter方法有且只有乙個引數) + 引數的型別(和例項變數型別相同) + 引數名(和例項變數名相同)

getter 方法的作用:獲取單一的例項變數的值;

getter 方法規範寫法:-號方法, 有返回值(返回值型別和例項變數型別相同) 方法名直接和例項變數名相同 無引數

@synthesize屬性的實現部分, 實現屬性自動生成的setter和getter方法

name屬性名, 指定要實現哪乙個屬性生成的setter和getter方法

_name, 指定setter和getter方法內部所要操作的例項變數

若指定的例項變數沒有定義, 系統會自動生成指定的例項變數, 但是生成的例項變數是私有的, 子類不能直接訪問

若例項變數想讓子類訪問, 先在.h檔案必須定義例項變數

若未指定setter和getter內部所要訪問的例項變數時, 系統自動生成乙個和屬性名一樣的例項變數

若對於setter和getter方法, 若我們實現了, 則系統就不會再自動生成

若在.m檔案中, 未通過@snythesize對屬性進行合成, 系統回自動合成, 只不過此時系統預設的setter和getter方法內部所操作的例項變數時_屬性名

若將@snythesize省略, 並且我們自己實現setter和getter方法時, 系統既不會生成對應的setter和getter, 還有例項變數

1 當把語義特性宣告為assign時, setter和getter方法內部實現

- (void)setname:(nsstring *)name

- (nsstring *)name

2 當把語義特性宣告為retain時, setter和getter方法內部實現

- (void)setname:(nsstring *)name

} - (nsstring *)name

3 當把語義特性宣告為copy時, setter和getter方法內部實現

- (void)setname:(nsstring *)name

} - (nsstring *)name

屬性與點語法

1.setter 方法的作用 為單一例項變數賦值 setter 方法的規範寫法 號 方法,無返回值,名字以set開頭 要設定的變數的例項變數名 首字母大寫 setter方法有且只有乙個引數 引數的型別 和例項變數的型別相同 引數名 和例項變數名相同 getter 方法的作用 獲取單一例項變數的值 g...

屬性以及點語法

1.oc提供屬性的目的是為了簡化程式設計師編碼 為屬性提供了一些關鍵字用以控制 2.setter getter的實現細節 3.這些關鍵字我們稱為屬性的屬性 attribute 一共有三大類attribute 第一類 讀寫性控制 readonly readwrite readonly,告訴編譯器,只宣...

OC 屬性點語法

點語法和 property 知識點一 setter和getter方法 帶上下劃線 二 點語法 乙個引數的set方法可以使用點語法賦值 xiaoxin setname 小新 這不是使用成員變數,是使用set方法 xiaoxin.name 小新 可以通過.語法呼叫get方法 nsstring ret x...