IOS變數的property屬性設定和意義總結

2021-06-18 23:16:20 字數 1775 閱讀 7714

最近有機會對ios的property屬性進行了乙個全面的了解和總結:

ios 的@property和@synthesize幫我們輕易的生成物件的getter和setter方法來完成對物件的賦值和訪問。但是如果我們如果要動態設定物件的getter和setter方法可以使用@property和@dynamic組合。物件訪問方法property的屬性設定非常多,諸如:atomic和nonatomic,readwrite和readonly,retain,assign和copy,strong和weak。

1.atomic 和 nonatomic

atomic是預設的屬性,表示對物件的操作屬於原子操作,主要是在多執行緒的環境下,提供多執行緒訪問的安全。我們知道在多執行緒的下對物件的訪問都需要先上鎖訪問後再解鎖,保證不會同時有幾個操作針對同乙個物件。如果程式設計中不涉及到多執行緒,不建議使用,因為使用atomic比nonatomic更耗費系統資源。

nonatomic 表示訪問器的訪問不是原子操作,不支援多執行緒訪問安全,但是訪問效能高。

2.readwrite 和readonly

readwrite 是預設的屬性,表示可以對物件進行讀和寫,會生成物件相應的setter和getter方法。

readonly 表示只允許讀取物件的值,只會生成物件的getter方法。

3.retain,assign和copy

retain 表示對nsobject和及其子類物件release舊值,再retain新值,使物件的應用計數增加一。

此屬性只能使用於obejective-c型別物件,而不能用於core foundation物件。

(retain會增加物件的引用計數,而基本資料型別或者core foundation物件都沒有引用計數,把物件新增到陣列中時,引用計數將增加1)。

- (void) setoldvalue: (nsstring*) newvalue

}assign 是預設屬性,只可以對基本資料型別(如cgfloat,nsinteger,bool,int,**物件)等使用。該方式會對物件直接賦值而不會進行retain操作。

copy 表示重新建立乙個新的計數為1的物件,然後釋放掉舊的值。

都知道retain是對指標的拷貝,copy是對內容的拷貝。比如:nsstring 物件的位址為0x100,其內容為「string」,如果使用copy到另外乙個nsstring物件,則會生成另外乙個位址為0x110的物件,只不過內容仍然是『string「。如果使用retain到另外乙個nsstring物件,則該物件的位址仍然為0x100,只不過該物件的計數變為2.

4.strong 和 weak

在arc的模式下,物件宣告時需要加入strong和weak,方便記憶體的自動管理。預設情況下是strong型別。

strong 強引用,預設的屬性,類似於retain,其實是乙個相對的概念,就是乙個引用。如果有乙個強引用持有該物件,則該物件就不能被釋放。預設的所有例項變數和區域性變數都是strong指標。

weak 弱引用,類似於assign,弱引用除了不決定物件的存亡外,其他與強引用相同。即使乙個物件被持有無數個若引用,只要沒有強引用指向他,那麼其還是會被清除,它不是物件的擁有者。其值會在物件被釋放後自動設定為nil。

weak指標主要用於「父-子」關係,父親擁有乙個兒子的strong指標,因此父親是兒子的所有者;但為了阻止所有權迴圈,兒子需要使用weak指標指向父親。典型例子是delegate模式,你的viewcontroller通過strong指標(self.view)擁有乙個uitableview,

uitableview

的datasource和delegate都是weak指標,指向你的viewcontroller。

IOS開發需要注意的property變數宣告

在ios開發中,變數的宣告有2種比較常用,我這裡說說它們的區別 一般大家喜歡在標頭檔案中宣告property,然後在m檔案synthsize,dealloc中release。這種做法比較多,但很多新手不知道其中的風險,這裡解釋一下。在開發中,如果這個類有需要暴露給外部呼叫的,可以採用property...

IOS變數的property屬性設定和意義總結

最近有機會對ios的property屬性進行了乙個全面的了解和總結 ios 的 property和 synthesize幫我們輕易的生成物件的getter和setter方法來完成對物件的賦值和訪問。但是如果我們如果要動態設定物件的getter和setter方法可以使用 property和 dynam...

ios 開發筆記 property和成員變數

因為看的資料比較雜,一直很迷惑這個,今天花了點時間整理一下思路 比如下面的一些寫法,不同的教程都不一樣 self.test abc test abc test release self.test release self.test nil 總結下 property nonatomic,retain ...