1.在ARC模式下,在有可能出現(xiàn)循環(huán)引用時(shí),讓其一端使用weak修飾。例如:delegate(代理)屬性
2.自身已經(jīng)對它強(qiáng)引用一次了,沒有必再強(qiáng)引用一次使用weak解決。例如:自定義IBOutlet控件屬性
- 兩者區(qū)別:
1.weak只能用于修飾對象類型,基本數(shù)據(jù)類型不能使用
2.assign修飾對象和基本數(shù)據(jù)類型都可以,但是只是簡單地進(jìn)行賦值操作而已
注意:assign修飾的對象(一般編譯的時(shí)候會(huì)產(chǎn)生警告:Assigning retained object to unsafe property; object will be released after assignment)在釋放之后,指針的地址還是存在的,也就是說指針并沒有被置為nil,造成野指針。對象一般分配在堆上的某塊內(nèi)存,如果在后續(xù)的內(nèi)存分配中,剛好分到了這塊地址,程序就會(huì)崩潰掉。
那為什么可以用assign修飾基本數(shù)據(jù)類型?因?yàn)榛A(chǔ)數(shù)據(jù)類型一般分配在棧上,棧的內(nèi)存會(huì)由系統(tǒng)自己自動(dòng)處理,不會(huì)造成野指針。
weak修飾的對象在釋放之后,指針地址會(huì)被置為nil。所以現(xiàn)在一般弱引用就是用weak。