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

2021-07-09 08:20:19 字數 393 閱讀 8194

相同點:

assgin和weak均表明該屬性定義了一種「非擁有關係」,即在為此種屬性設定新值時,既不保留新值,也不釋放舊值。

區別:(1)weak在物件銷毀時,屬性值會置為nil,而assign只會執行對「純量型別」做簡單的賦值操作。

(2)assgin可以用於非oc物件,例如float、bool、int等型別,而weak只可用於oc物件

使用場景:

weak:(1)在arc中,在有可能出現迴圈引用的時候,往往要通過讓其中一端使用weak來解決,例如:delegate**屬性

(2)自身已經對它進行一次強引用,沒有在強調引用一次,此時也會使用weak

(3)在物件銷毀時,需要對物件置為nil時,用weak

assgin:用來修飾基本型別是用assgin

weak和assign的區別

工作之後,一直使用arc,weak作為property的關鍵字之一,代表弱引用,物件的引用計數不改變。從記憶體管理上說這點和assign是相同的。倆者的不同在於 1.weak 此特質表明該屬性定義了一種 非擁有關係 nonowning relationship 為這種屬性設定新值時,設定方法既不保留...

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是...