iOS 代理为啥要用weak修饰

  • 内存泄漏(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固然也不会释放,这就是造成循环引用的导致内存泄露的原因!

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值