如題没卸,最近檢查代碼羹奉,慢慢的填之前挖過的坑,發(fā)現(xiàn)之前寫的代碼真是差到不忍直視约计。發(fā)現(xiàn)很多循環(huán)引用問題诀拭。
容易引起循環(huán)引用的問題總結(jié)
- 1.delegate的寫法,應(yīng)按照如下寫法煤蚌,切記不可存在
strong
標(biāo)示符耕挨。
@property (nonatomic, weak, nullable) id <UICollectionViewDelegate> delegate;
@property (nonatomic, weak, nullable) id <UICollectionViewDataSource> dataSource;
- 2.單例里面的變量。
錯(cuò)誤寫法尉桩,然后將self
傳入筒占,導(dǎo)致釋放不掉。
@property (nonatomic,strong) UIViewController *mViewController;
- 3.block里面注意弱引用self即可蜘犁。
- 4.傳值時(shí)注意被賦值的變量翰苫。
UIViewController *vc;//默認(rèn)為strong類型,同樣可寫為UIViewController __strong *vc
UIViewController __weak *vc;//通過__weak弱引用變量。
5.NSTimer
會(huì)對(duì)傳入的target強(qiáng)引用奏窑,具體參看Weak Reference to NSTimer Target To Prevent Retain Cycle
解決辦法有兩個(gè):
a.GCD完成NSTimer的功能
https://github.com/mindsnacks/MSWeakTimer
b.用一個(gè)中間對(duì)象處理
YYWeakProxy