iphone:如何解决这个内存泄漏问题?

时间:2011-10-10 14:38:08

标签: iphone objective-c ios memory-management instruments

如何解决这个内存泄漏...我甚至在最后发布它,就像在pic中但仍然存在。如果语句差不多10-15就像使用给定的代码一样使用...但最后我释放它。

enter image description here

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


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

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

4 个答案:

答案 0 :(得分:3)

发布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执行“分析”。 (它位于“构建”菜单项下方。)我认为应该捕获忘记释放内部messageString的问题。在运行仪器之前使用“分析”。

答案 1 :(得分:0)

查看您是否将其保留在代码中的其他位置。如果是这样,那可能需要额外的释放。另请注意,您可能使用传递messageString作为参数的方法也可能会保留它。

答案 2 :(得分:0)

确保释放if块内的字符串。

答案 3 :(得分:0)

基本的经验法则是,对于每个allocnewretaincopy,您需要releaseautorelease }。您似乎错过了某处releaseautorelease

顺便说一句,你可以使用Xcode的“构建和分析”来帮助在部署到测试设备之前找到内存泄漏。