簡體   English   中英

iPhone:如何解決此內存泄漏?

[英]iphone : how to solve this memory leak?

如何解決此內存泄漏問題……我什至如圖所示在最后將其釋放,但仍然存在。 如果語句幾乎是10-15則像給定代碼一樣使用它...但是最后我釋放了它。

在此處輸入圖片說明

LoginResponse *response = [[LoginResponse alloc] initWithMessageString: messageString];


ServerMessage *ackMessage = [[ServerMessage alloc] initWithMessageToAck:response];
[[NSNotificationCenter defaultCenter] postNotificationName:@"SendMessageToServer" object:ackMessage];

[[NSNotificationCenter defaultCenter] postNotificationName:@"LoginResponseReceived" object:response];

沒有釋放messageString 您正在做的是這樣的:

// there's a messageString
if(...){
     NSString* messageString= [[NSString alloc] init ... ]
                                   // you're declaring new messageString, 
                                   // not related to the outer messageString
     ...
     // and you didn't release the inner messageString. 
     // The pointer messageString just goes away.
}
[messageString release]; // you're releasing outer messageString, not inner messageString.

從XCode執行“分析”。 (它在“ build”菜單項的下面。)我認為這應該可以解決忘記釋放內部messageString 運行儀器之前,請使用“分析”。

查看您是否將其保留在代碼中的其他位置。 如果是這樣,則可能需要額外發行。 還要注意,您可能使用將messageString作為參數傳遞的方法可能也會保留它。

確保釋放if塊內的字符串。

基本的經驗法則是,對於每個allocnewretaincopy ,您都需要releaseautorelease release 似乎您在某處缺少releaseautorelease release

順便說一句,您可以(並且應該)使用Xcode的“ Build and Analyze”(構建和分析)來幫助發現內存泄漏,甚至可以部署到測試設備上。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM