ios - 如何使用 Xcode 中的仪器检查堆内存?

标签 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、时间字符串,我会收到发送到已释放实例的消息。我确信如果我不释放这些变量,内存就会泄漏。我尝试了仪器并得到了以下结果,这就是它。
instruments leaks]![screensshot from instruments showing memory leaks

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

最佳答案

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

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

关于ios - 如何使用 Xcode 中的仪器检查堆内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18335057/

相关文章:

ios - QuartzCore - CA::Render::Shmem::new_shmen() 内存泄漏

ios - 优化 iOS 应用程序的迭代循环

ios - iOS 上的 NSZombie 不在模拟器中

ios - NSOperationQueue Heisenbug?

ios - swift |如何以编程方式将尾随空格添加到 UILabel?

.net - 内存泄漏和弱引用

iphone - 如何释放为 appDelegate 共享实例分配的内存

iphone - 与 iPhone 相比,iPad 上的通用应用程序使用的内存少得多

ios - 创建基于渐变的 UICollectionViewCell 背景色

ios - 我可以直接从具有特定大小类或特征集合的 xib 加载 UITableViewCell 吗?