我创建了一个示例应用程序,它声明了一个宏,如下所示:
#define kSampleString @"didReceiveMemoryWarningdidReceiveMemoryWarningdidReceiveMemoryWarningdidReceiveMemoryWarningdidReceiveMemoryWarningdidReceiveMemoryWarningdidReceiveMemoryWarningdidReceiveMemoryWarningdidReceiveMemoryWarningdidReceiveMemoryWarningdidReceiveMemoryWarningdidReceiveMemoryWarning"
当用户点击下面的事件处理程序时,我会记录宏字符串。
-(IBAction)SampleMethod:(id)sender{
NSLog(@"Log %@",kSampleString);
}
以下是我得到的工具数据:
在检查仪器中的分配时,我得到了以下信息。我能够发现分配发生在红色标记区域的NSLogv调用中。但是如何解释与NSLogv相关的其他事情。那些malloc操作发生了什么?
答案 0 :(得分:1)
Malloc只是目标C的alloc的C版本,并且在执行alloc时最终被调用。 Instruments会跟踪您应用中的所有分配,因此Malloc显然是很自然的。
至于CFString,那是NSString的CoreFoundation表兄弟(因为NSString是围绕CFString构建的类集群),无论如何你总是应该传递NSLog()一个不可变的字符串,所以这很有道理。如果你的应用程序泄漏内存,那么这将是一个问题,但就目前而言,一切都很好。
我担心的是大量的1.5 KB字符串Malloc大约在列表的一半。对于一个简单的字符串来说,这看起来太多了。