天天看點

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對象。