-
内存泄漏(Memory Leak)是指程序中己动态分配的堆内存由于某种原因程序未释放或无法释放,造成系统内存的浪费,导致程序运行速度减慢甚至系统崩溃等严重后果。
-
assgin和weak的区别:
assgin 在引用计数=0 的时候,不会自动置为nil . weak 会自动置为nil,所以代理用weak合适,需要释放 -
strong引用计数+1,weak关键字修饰的对象,对象的引用计数不会+1
iOS 代理为啥要用weak修饰
https://www.jianshu.com/p/398472616435
至于什么时候用strong 和weak?
1.平时一般都是用strong,也就是默认不添加,在会照成循环引用时才使用weak。
当两个不同的对象各有一个强引用指向对方时就造成循环引用,会导致对象无法释放,例如我们常用的delegate,
见图:VC强引用tableview,tableview的代理指向VC的必须是weak,不然会循环引用;

分析上图,如果代理用strong修饰,循环引用的原因?
-
VC对tableview强引用
@property (nonatomic, strong) tableview *tableview; -
self.tableview.delegate指向VC,又对VC强引用,使VC的retainCount + 1
-
当viewController不对tableview引用后,tableview.delegate对viewController还强引用着,viewController的retainCount为1,所以viewController不会释放,tableview固然也不会释放,这就是造成循环引用的导致内存泄露的原因!
1万+

被折叠的 条评论
为什么被折叠?



