当在Obj-C中释放方法局部变量时

Fre*_*ins 3 iphone memory-management objective-c ios

我正在开发一个iPhone应用程序,我刚刚创建了这个方法(它是在单例类中):

- (NSDictionary *)getLastPosts
{
    SBJsonParser *parser = [[SBJsonParser alloc] init];

    NSURLRequest *request = [NSURLRequest requestWithURL:
                             [NSURL URLWithString:http://example.org/last/]];

    NSData *response = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];

    NSString *json_string = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding];

    NSDictionary *data_dict = [parser objectWithString:json_string error:nil];

    // release stuff
    [parser release];
    [request release];
    [response release];
    [json_string release];

    return data_dict;
}
Run Code Online (Sandbox Code Playgroud)

我是一个新手obj-c开发人员,所以我不确定这两件事:

  • 方法结束时释放的四个变量是否正确?
  • data_dict什么时候应该发布NSDictionary ?

更新1

如果data_dictNSDictionary *data_dict = [[NSDictionary alloc] init],当我应该释放呢?

更新2

在此输入图像描述

在调用者中我有这个:

- (void)callerMethod
{
    NSDictionary *tmpDict = [mySingleton getLastPosts];
    NSLog(@"retain count: %d", [tmpDict retainCount]);
}
Run Code Online (Sandbox Code Playgroud)

并且调试控制台打印:

retain count: 2
Run Code Online (Sandbox Code Playgroud)
  • 为什么"Xcode Analyze"告诉我这些线?
  • 为什么保留计算它是2?

Mun*_*ndi 6

通常,最好释放不再需要的对象.但是,请记住-只有具备的东西alloc,new或者copy在他们的初始化需要被释放.否则他们已经自动释放了.

因此,可以释放解析器,不能释放请求,不能释放响应,可以释放json_string.