如何解决这个内存泄漏...我甚至在最后发布它,就像在pic中但仍然存在。如果语句差不多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];
答案 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)
基本的经验法则是,对于每个alloc
,new
,retain
或copy
,您需要release
或autorelease
}。您似乎错过了某处release
或autorelease
。
顺便说一句,你可以使用Xcode的“构建和分析”来帮助在部署到测试设备之前找到内存泄漏。