2012-05-10 104 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大約在名單的中途。這看起來像一個簡單的字符串太多的內存。