使用Xcode的Instruments调试内存泄漏

使用Xcode的Instruments调试内存泄漏

知识记录

  1. 使用Activity Monitor查看应用整体内存
  2. 使用Allocations查看应用内存分配
  3. 更改代码观察前后内存变化

Instruments-Activity Monitor

1. 打开项目中的Profile-Activity Monitor
  • 注意:Xcode中Profile的使用必须要用自己的开发项目,需要以开发者的身份,不然会显示需要Develop的Certifacate。
  • 推荐用Activity Monitor观察应用内存,虽然Allocations也可以看,但Activity Monitor更稳定,可以稳定运行6个小时。

首先测试真机连接电脑,点击Xcode->Product->Profile,选择Activity Monitor
在这里插入图片描述
在这里插入图片描述

2. 查看应用内存变化

先观察应用内存的整体变化趋势
在这里插入图片描述
在这里插入图片描述
可以将采集的数据保存在文件里。
在这里插入图片描述

在这里插入图片描述

Instruments-Allocations

1. 打开项目中的Profile-Allocations

在这里插入图片描述
在这里插入图片描述

2. 查看应用内存分配

点击左上角的圆点,开始数据采集。
在这里插入图片描述
在这里插入图片描述

修改Xcode中代码

找到UnityAppController.h,在开头添加#import <objc/runtime.h>
找到- (BOOL)application:(UIApplication*)application didFinishLaunchingWithOptions:(NSDictionary*)launchOptions在这个函数里面进行代码的修改,比如说在Allocations观察到MyPerformaneceInfo这个类的toJSONString函数有问题,我们可以在运行时替换掉toJSONString里面的方法,在函数的末尾添加:

Class myCls = NSClassFromString(@"MyPerformanceInfo");
Method originalMethod = class_getClassMethod(myCls, @selector(toJSONString:));
Method swizzledMethod = class_getClassMethod([self class],@selector(hookJSON:));
method_exchangeImplementations(originalMethod, swizzledMethod);

return YES;

在函数外面实现hookJSON的方法:

+ (NSString *)hookJSON:(id)jsonObj {
    NSString *a = nil;
   // @autoreleasepool {
    if (jsonObj == nil) {
        return nil;
    }
    if (![NSJSONSerialization isValidJSONObject:jsonObj]) {
        return nil;
    }
    NSError *error;
    NSData *data = [NSJSONSerialization dataWithJSONObject:jsonObj
                                                   options:0
                                                     error:&error];
    NSUInteger size = [data length];
    NSLog(@"size length:%@",@(size));
    if (error || data==nil) {
        return nil;
    }
        a = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
    //}
    return a;
}

这样就实现了在运行时对代码的调试。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值