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

Swift内存管理技巧
本文介绍了一种通过运行时方法交换技巧来简化Swift中UIViewController的dealloc方法调用过程的方法,利用JRSwizzle第三方库实现所有UIViewController子类的dealloc方法统一处理,方便监控内存释放情况。

    欢迎转载,转载时请注明出处,不胜感激!

      近期在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里注册通知或者使用kvo的,还是需要在dealloc方法里remove掉这些已注册的通知)


转载于:https://my.oschina.net/u/820019/blog/208558

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值