assign與weak,它們都是弱引用宣告型別,最大的區別在那呢?
如果用weak宣告的變數在棧中就會自動清空,賦值為nil。
如果用assign宣告的變數在棧中可能不會自動賦值為nil,就會造成野指標錯誤!
他們常用在基本型別屬性,比如bool,int等,還有就是delegate。
在使用delegate時,需要注意,非arc時是使用assign,但到了arc時代,都建議使用weak,這樣更安全。
不管是在非arc還是arc,使用assign時,都需要注意釋放:
如果你寫的library比較早,那時還是非arc的,你的delegate設成assign property,這樣是為了不造成circular reference
當別人使用你的library的時候,記得在你自己dealloc的時候,把delegate設成nil,以避免crash的事情發生。
這在非arc模式下是比較自然的,都會這麼去做
但在arc模式下,使用方就不會有dealloc處理的習慣了
如果在arc下,沒有做這個邏輯的話,當頁面銷毀的時候,很可能出現delegate物件無效,導致程式crash。
參考:1.
2.3.
iOS中 assign 和 weak 修飾符的區別
assign 與 weak,它們都是弱引用宣告型別,最大的區別在那呢?如果用 weak 宣告的變數在棧中就會自動清空,賦值為 nil。如果用 assign 宣告的變數在棧中可能不會自動賦值為 nil,就會造成野指標錯誤!他們常用在基本型別屬性,比如 bool,int 等,還有就是 delegate。...
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...