1

我创建了一个示例应用程序,它声明了一个宏,如下所示:

#define kSampleString @"didReceiveMemoryWarningdidReceiveMemoryWarningdidReceiveMemoryWarningdidReceiveMemoryWarningdidReceiveMemoryWarningdidReceiveMemoryWarningdidReceiveMemoryWarningdidReceiveMemoryWarningdidReceiveMemoryWarningdidReceiveMemoryWarningdidReceiveMemoryWarningdidReceiveMemoryWarning"

当用户单击下面的事件处理程序时,我会记录宏字符串。

-(IBAction)SampleMethod:(id)sender{
    NSLog(@"Log %@",kSampleString);
}

以下是我得到的仪器数据:

在此处输入图像描述 在检查 Instruments 中的分配时,我得到了以下信息。我能够发现分配发生在以红色标记的区域中的 NSLogv 调用中。但是如何解释与 NSLogv 相关的其他事情。那些 malloc 操作发生了什么?

4

1 回答 1

1

Malloc 只是目标 C 的 alloc 的 C 版本,最终在执行 alloc 时调用。Instruments 会跟踪您应用程序中的所有分配,因此 Malloc 会出现是很自然的。

至于 CFString,它是 NSString 的 CoreFoundation 表亲(因为 NSString 是围绕 CFString 构建的类集群),无论如何你总是应该传递 NSLog() 一个不可变的字符串,所以这很有意义。如果您的应用程序正在泄漏内存,那么这将是一个问题,但就目前而言,一切都很好。

我担心的是大约在列表中的一半大小的 1.5 KB 字符串 Malloc。对于一个简单的字符串来说,这看起来太多了。

于 2012-05-10T03:22:12.460 回答