之前對於property的引數,一直是弄得雲裡霧裡的,不知道這些引數到底有啥用,最近學了記憶體管理,算是對它有了一點理解,我也來總結一下把。(推薦看這篇文章之前先了解一下記憶體管理的基本知識ios記憶體管理初認識)
首先,引數分三類:
原子性:atomic/nonatomic (預設是atomic)
atomic:對屬性加鎖,只能乙個執行緒對它進行訪問,多執行緒下安全
nonatomic:對屬性不加鎖,多執行緒下不安全(速度比較快,一般不使用多執行緒的情況下都用它)
讀寫:readwrite/readonly(預設是readwrite)
readwrite:生成setter和getter方法
記憶體:assign/retain/copy(ios5以後在arc中用strong/weak)
assign:在set方法中是直接賦值,不改變引用計數,一般用於基本型別,否則容易造成記憶體洩漏。(建議先看看記憶體管理的知識,這些就很容易理解了)
copy:先release原來的值,再copy新值,就是生成乙個新的物件並且引用計數為1,位址不同。(copy與retain的區別就是:copy其實是建立了乙個相同的物件(不同的位址),而retain只是儲存其物件,並且其計數值+1。retain是指標拷貝,copy是內容拷貝)
strong:用來修飾強引用的屬性,是強指標,是物件的擁有者(乙個物件可以有多個擁有者),能保持物件的生命(在arc中預設是strong指標)
weak:用來修飾弱引用的屬性,是弱指標,可以指向乙個物件,但不是物件的擁有者,如果物件被釋放,該指標變數會自動變為nil,
這樣阻止了weak指標繼續指向已釋放物件,避免了野指標
的產生,不然會導致非常難於尋找的bug,空指標消除了類似的問題。
weak指標主要用於「父-子」關係,父親擁有乙個兒子的strong指標,因此父親是兒子的所有者;但為了阻止所有權迴圈,兒子需要使用weak指標指向父親。典型例子是delegate模式,你的viewcontroller通過strong指標(self.view)擁有乙個uitableview, uitableview的datasource和delegate都是weak指標,指向你的viewcontroller
property引數的作用
property是乙個屬性訪問宣告,擴號內支援以下幾個屬性 1,getter gettername,setter settername,設定setter與getter的方法名 2,readwrite,readonly,設定可供訪問級別 2,assign,setter方法直接賦值,不進行任何retai...
property屬性引數
1.讀寫屬性 預設是readwrite,會生成getter和setter方法 如果是readonly表示只會生成getter方法 2.setter處理 預設是assign 賦值 因此基本資料型別不需要加這個引數。因為在setter方法裡,我們經常要將乙個物件賦值給類的成員屬性,這個時候根據記憶體管理...
引數檢查 property
繫結屬性時,如果直接把屬性暴露出去,雖然寫起來很簡單,但無法對引數進行檢查,導致屬性被隨便修改 因此,可以通過在類內定義get 獲取屬性值,定義set 對屬性值進行設定並對設定值進行檢查 但通過定義get 和set 會讓程式顯得複雜,沒有直接用屬性這麼直接簡單 python內建的 property裝...