对于目标C,我是新手,目前我正在使用以下代码片段进行内存泄漏。使用'responseObj'分配会发生内存泄漏。每当我尝试释放它类似于responseData时,我都会崩溃。
-(void) connectionDidFinishLoading:(NSURLConnection *)connection
{
NSString* responseStr = [[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding];
NSMutableArray* responseObj = [responseStr objectFromJSONString];
[delegate loadGameDetails:[responseObj objectForKey:@"result"]];
[responseStr release];
[responseData release]; responseData = nil;
}
我也尝试自动发布如下,但我也遇到了崩溃:
[delegate loadGameDetails:[[responseObj objectForKey:@"result"] autorelease]];
我释放这段记忆的正确方法是什么?
答案 0 :(得分:2)
问题不在您的分配中。您正在向objectForKey:
发送NSMutableArray
,这实际上是NSDictionary
/ NSMutableDictionary
方法。仔细检查对象objectFromJSONString
的实际返回类型。
答案 1 :(得分:1)
该代码中没有任何内容泄露。你有一个可能过度释放的responseData但我无法分辨,因为它的声明和设置不在范围内。如果它是一个ivar,你通常会通过访问器(将在那里释放它)将其设置为nil,而不是像你在这里那样直接。
如果有泄漏,则在loadGameDetails方法中。是什么让你觉得你有内存泄漏?您是通过仪器运行,还是使用静态分析仪?
答案 2 :(得分:0)