2012-05-10 145 views
1

我创建了声明宏下面示例应用程序:如何解释此iOS仪器数据?

#define kSampleString @"didReceiveMemoryWarningdidReceiveMemoryWarningdidReceiveMemoryWarningdidReceiveMemoryWarningdidReceiveMemoryWarningdidReceiveMemoryWarningdidReceiveMemoryWarningdidReceiveMemoryWarningdidReceiveMemoryWarningdidReceiveMemoryWarningdidReceiveMemoryWarningdidReceiveMemoryWarning" 

当用户点击下面的事件处理程序,我登录宏字符串。

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

下面是仪器的数据我有:

enter image description here 在检查仪器的拨款,我得到了以下信息。我能够发现分配发生在红色标记区域的NSLogv调用中。但是,如何解释与NSLogv有关的其他事情。那些malloc操作发生了什么?

+0

谁知道NSLog的核心潜伏着什么邪恶? –

+0

@HotLicks [显然这个家伙](http://www.karlkraft.com/index.php/2009/03/23/114/) – CodaFi

+1

难道你不能通过暴露扩展详细视图来看它来自哪里在右侧?这应该显示负责分配的堆栈跟踪。 –

回答

1

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

至于CFString,这是NSString的CoreFoundation表兄弟(因为NSString是围绕CFString构建的类集群),并且总是应该通过NSLog()永远不变的字符串,所以这使得完美感。如果你的应用程序泄漏内存,那么这将是一个问题,但现在,一切都很好。

我会担心的是,大量的1.5 KB字符串Malloc大约在名单的中途。这看起来像一个简单的字符串太多的内存。