4

我正在尝试使用 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、时间字符串,则会收到发送到已释放实例的消息。我确信如果我不释放这些变量,内存就会泄漏。我尝试了仪器并得到了以下结果,就是这样。
仪器泄漏]![显示内存泄漏的仪器屏幕截图

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

4

2 回答 2

1

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

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

于 2013-08-20T20:30:10.723 回答
0

如果您使用 ARC,请在创建泄漏时将其禁用到您的班级 - 现在您可以释放变量: 在此处输入图像描述 或者您可以尝试像这样创建日期格式化程序:

NSDateFormatter *df = [[NSDateFormatter alloc] init];
于 2013-08-20T13:08:45.987 回答