一、差別
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。
是以,在我們使用網上下載下傳的開源庫或者時間比較久的代碼時,記得檢查delegate的修飾符,如果是assign的需要及時修改為weak。
參考:
1. http://stefan321.iteye.com/blog/1593869
2.http://lizhuang.iteye.com/blog/1989337
3. http://94it.net/a/jingxuanboke/2014/1218/427909.html