循环引用不释放控制器

本文介绍了Objective-C中如何检测和修复内存泄漏问题,包括通过检查是否调用了dealloc方法来判断控制器是否被正确释放,并提供了几种常见内存泄漏场景及其解决办法。

理论不介绍,直接上干货~

一、检测

检测控制器是否被释放,可以检测是否调用了-dealloc生命周期方法。

二、修复

1、因为NSTimer没有释放的原因
避免方式:记得将NSTimer对象timerObj失效与置空。
[self.timerObj invalidate];
self.timerObj = nil;
 
2、成为别人的委托对象,却把自己给搭进去出不来
避免方式:声明delegate时请用assign(MRC)或者weak(ARC)。
 
3、block环
避免方式:
【1】如果是属性
@property (nonatomic, assign) NSInteger *age;

在block外面:__weak typeof(self) weakSelf = self;

在block里面:weakSelf.age = 18;
 
【2】如果是成员变量
{
    NSString *_name;
}
在block外面:__weak typeof(self) weakSelf = self;
在block里面:__strong typeof(weakSelf) strongSelf = weakSelf;
                       strongSelf->_name = @“Ming”;

转载于:https://www.cnblogs.com/cchHers/p/7325186.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值