如何在ios中简便地判断内存是否泄露

近期在review同事的代码时,发现一大问题,几乎每个viewController的dealloc方法都没调用,也就是说几乎每个viewController都存在着内存泄露

    然后就是每个viewController一个个的改,写上dealloc方法,在里面打印信息看此方法是否调用,做到一半时,我发现工作量有点大,一个工程有好多个viewController,每个viewController都写一遍dealloc方法实在太烦琐了,于是在想能否统一在一个地方写一个dealloc方法,统一打印释放的信息。

    思来想去,用运行时最好不过了,思路是写一个ViewController的类别方法myDealloc,在此方法里打印释放的信息,再与dealloc方法交换,代码如下

   

@interface UIViewController (MethodExchange)

@end

@implementation UIViewController (MethodExchange)

+ (void)load {
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        [self hackForDealloc];
    });
}

+ (void)hackForDealloc {
    
    [[self class] jr_swizzleMethod:NSSelectorFromString(@"dealloc") withMethod:@selector(myDealloc) error:nil];
}

- (void)myDealloc{
    SLLog(@"%@ dealloc", [self class]);
    [self myDealloc];
}
这里我用到了 JRSwizzle 这个第三方库来交换类的方法,大功告成!以后就可以很方便地查看ViewController是否被释放了,再也不用写不必要的dealloc方法了(注:如果个别viewController有在Notification里注册通知的,还是需要在dealloc方法里remove掉的)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值