一、property作用:
1、自動生成私有屬性
2、自動生成這個屬性的getter和setter方法的宣告;
3、自動生成這個屬性的getter和setter方法的實現;
注意:生成的setter方法的實現中,無論是什麼型別,都是直接賦值
二、property引數:
1、property是可以帶引數的 @property(引數一,引數二...);
2、property四組引數;
(1)與多執行緒c相關的兩個引數。
atomic、nonatomic
nonatomic:這個時候生成的setter方法的**就不會加安全鎖,效率高
(2)與生成setter方法實現相關的引數。
assign、retain
assign:預設值,生成的setter方法的實現就是直接賦值;
retain:生成的setter方法的實現 就是標準的mrc記憶體管理**,
也就是,先判斷新舊物件是否為同乙個物件;
如果不是就release,如果是就使用 ratain
當屬性的型別是oc物件型別的時候,就使用retain;
當屬性的型別是非oc物件型別的時候,就使用assign;
retain引數,只是生成標準的setter方法為標準的mrc記憶體管理**,不會自動的在dealloc中生成relase的**
所以,還要我們自己手動的在dealloc中release;
(3)與生成唯讀、讀寫相關的引數
readonyly.readwriter
readwriter:預設值,同時生成getter setter方法
readonly:只會生成getter不會生成seeter方法
(4)與生成的getter setter方法名字相關的引數
預設情況下:@propterty生成的getter和setter方法是最標準的
其實可以通過引數來制定@property生成的方法名
getter=ageget用來指定get方法的名字
setter=ageset:用來指定set方法的名字,後面必須加:冒號;
如果使用getter setter修改了生成f方法的名字。
如果在使用點語法的時候,編譯器轉化為修改後的名字的**
使用場景:如果使用boolear的時候,未了增加**的可讀性,可以加上is開頭
總結:1.與多執行緒相關的引數用nonatomic 預設natomic
2.於生成的setter方法相關的引數, 預設assign;
屬性的型別是oc物件 使用 retain
屬性的型別是非oc物件 使用assign
retain引數,只是生成標準的setter方法為標準的mrc記憶體管理**,不會自動的在dealloc中生成relase的**
所以,還要我們自己手動的在dealloc中release;
3.唯讀,讀寫
如果希望生成的封裝是唯讀封裝使用readonly
如果希望讀寫封裝,使用readwriter; 預設值
4.無論什麼情況都不要改setter
如果使用boolear的時候,未了增加**的可讀性,可以加上is開頭
總結:屬性的型別是oc物件 使用 retain(預設)
屬性的型別是非oc物件 使用assign
ui控制項使用uiimageview (weak)
字串nsstring用: (copy)
bool用:@property(nonatomic,assign,getter=isvip)boolvip;
nsintager等非oc用:@property(nonatomic,assign) nsintager number;
nsarray和模型bean 用(strong)
property屬性引數
1.讀寫屬性 預設是readwrite,會生成getter和setter方法 如果是readonly表示只會生成getter方法 2.setter處理 預設是assign 賦值 因此基本資料型別不需要加這個引數。因為在setter方法裡,我們經常要將乙個物件賦值給類的成員屬性,這個時候根據記憶體管理...
引數檢查 property
繫結屬性時,如果直接把屬性暴露出去,雖然寫起來很簡單,但無法對引數進行檢查,導致屬性被隨便修改 因此,可以通過在類內定義get 獲取屬性值,定義set 對屬性值進行設定並對設定值進行檢查 但通過定義get 和set 會讓程式顯得複雜,沒有直接用屬性這麼直接簡單 python內建的 property裝...
property引數的作用
property是乙個屬性訪問宣告,擴號內支援以下幾個屬性 1,getter gettername,setter settername,設定setter與getter的方法名 2,readwrite,readonly,設定可供訪問級別 2,assign,setter方法直接賦值,不進行任何retai...