weak和assign的區別

2021-07-11 19:53:14 字數 375 閱讀 5390

工作之後,一直使用arc,weak作為property的關鍵字之一,代表弱引用,物件的引用計數不改變。從記憶體管理上說這點和assign是相同的。

倆者的不同在於

1.weak

此特質表明該屬性定義了一種「非擁有關係」 (nonowning relationship)。為這種屬性設定新值時,設定方法既不保留新值,也不釋放舊值。此特質同assign類似, 然而在屬性所指的物件遭到摧毀時,屬性值也會清空(nil out)。 而 

assign

的「設定方法」只會執行針對「純量型別」 (scalar type,例如 cgfloat 或 nslnteger 等)的簡單賦值操作。

2.assigin 可以用非 oc 物件,而 weak 必須用於 oc 物件

weak和assign的區別

weak比assign多了乙個功能就是當屬性所指向的物件消失的時候 也就是記憶體引用計數為0 會自動賦值為nil,這樣再向weak修飾的屬性傳送訊息就不會導致野指標操作crash import viewcontroller.h inte ce viewcontroller property nona...

assign 和 weak的區別

assign 和weak都是弱引用型別 用weak宣告的變數在棧中會自動清零,賦值為nil 用assign 宣告的變數在棧中可能不會自動賦值為nil,會造成野指標錯誤 在定義乙個類的property時候,為property選擇 strong 還是copy 特別注意和研究明白的,如果property是...

weak和assign的區別,以及使用場景

相同點 assgin和weak均表明該屬性定義了一種 非擁有關係 即在為此種屬性設定新值時,既不保留新值,也不釋放舊值。區別 1 weak在物件銷毀時,屬性值會置為nil,而assign只會執行對 純量型別 做簡單的賦值操作。2 assgin可以用於非oc物件,例如float bool int等型別...