1. 程式人生 > >weak和assign關鍵字有什麼不同

weak和assign關鍵字有什麼不同

首先說說在什麼情況下使用 weak 關鍵字

1、ARC中,在有可能出現迴圈引用的時候,往往要通過讓其中一端使用weak來解決,比如:delegate 的代理屬性。

2、自身已經對它有過一次強引用,所以沒有必要再強引用一次。這個時候也會使用weak;還有就是自定義IBOutlet控制元件屬性一般也使用weak,一般情況也可以使用strong。

那麼weak和assign有什麼不同呢?

1、weak的特質表明,該屬性定義了一種“非擁有關係” (nonowning relationship)。為這種屬性設定新值時,設定方法既不保留新值,也不釋放舊值。此特質同assign類似, 但是在屬性所指向的物件被摧毀時,屬性值也會清空(nil out)。 但是assign的“設定方法”只會執行鍼對“純量型別” (scalar type,例如 CGFloat 或 NSlnteger 等)的簡單賦值操作。

2)assigin可以用於非OC物件,但是weak必須用於OC物件。