正确的方式释放内存分配?

时间:2011-12-17 06:44:16

标签: iphone objective-c cocoa-touch memory-management ios4

对于目标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]];

我释放这段记忆的正确方法是什么?

3 个答案:

答案 0 :(得分:2)

问题不在您的分配中。您正在向objectForKey:发送NSMutableArray,这实际上是NSDictionary / NSMutableDictionary方法。仔细检查对象objectFromJSONString的实际返回类型。

答案 1 :(得分:1)

该代码中没有任何内容泄露。你有一个可能过度释放的responseData但我无法分辨,因为它的声明和设置不在范围内。如果它是一个ivar,你通常会通过访问器(将在那里释放它)将其设置为nil,而不是像你在这里那样直接。

如果有泄漏,则在loadGameDetails方法中。是什么让你觉得你有内存泄漏?您是通过仪器运行,还是使用静态分析仪?

答案 2 :(得分:0)

在我看来,你没有分配/ init responseObj。

我还发现了另外一篇你可能会发现有用的帖子:

NSMutableArray memory management

希望它有所帮助!