如何使用Xcode中的工具检查堆内存?

时间:2013-08-20 12:27:58

标签: ios memory-leaks instruments

我正在尝试使用Xcode中的工具来分析泄漏。这是我正在尝试的示例代码。

+(NSString *) getUniqueFileName
{
NSDate *time = [NSDate date];
NSDateFormatter* df = [NSDateFormatter new];
[df setDateFormat:@"MMddyyyyhhmmssSSS"];
NSString *timeString = [df stringFromDate:time];
NSString *fileName = [NSString stringWithFormat:@"%@", timeString ];
//[time release];
// [df release];
// [timeString release];
return  fileName ;
}

每次捕捉照片时,我每次都会使用此方法生成文件名。所有变量都是他的方法的本地变量。如果我尝试释放时间,df,timestring,在获取文件名后,我将消息发送到解除分配的实例。我确信如果我不释放这些变量,内存将会泄漏。我尝试使用乐器,得到了以下结果,这里是。
instruments leaks]![screensshot from instruments showing memory leaks

现在我的问题是红色突出显示行的含义为79.6%? 20.4%的黄色行突出显示?一般来说红色会很危险。但%显示了什么?如何计算?当我检查调用树时,我会得到一个名为“Leaks”的列用于特定方法,并将包含100,234,560,2345,一些数字。这个数字是怎么说的。帮帮我。如果有人能为我提供理解仪器的良好链接,将会感激不尽。

2 个答案:

答案 0 :(得分:1)

为了解释屏幕截图中的百分比,在getUniqueFileName:中分配的泄漏内存中有79.6%是在红色代码行中分配的。在getUniqueFileName:中分配的泄漏内存的20.4%是在黄色代码行中分配的。红色表示高百分比。它可能是也可能不是危险的。

要解释Leaks列,它会告诉您方法中的泄漏次数以及方法调用的任何函数。它并不一定意味着方法本身存在许多泄漏。例如,Cocoa和Cocoa Touch应用程序以main()函数开头。如果main()函数在Leaks列中的值为100,则表示应用程序有100个内存泄漏,而不是main()有100个泄漏。

答案 1 :(得分:0)

如果您使用ARC,请在创建泄漏时将其禁用到您的班级 - 现在您可以释放您的变量: enter image description here 或者您可以尝试创建这样的日期格式化程序:

NSDateFormatter *df = [[NSDateFormatter alloc] init];