为什么我不应该发布这个字符串?

时间:2010-02-15 20:44:10

标签: objective-c release exc-bad-access

请看以下方法:

-(void)updateProfile:(Profile *)profile WithJSON:(NSString *)JSON;
{
    SBJSON *parser = [[SBJSON alloc] init];
    NSDictionary *object = [parser objectWithString:JSON error:nil];

    NSNumberFormatter *nf = [[NSNumberFormatter alloc] init];
    [nf setPositiveFormat:@"#,##0"];

    profile.displayName = [object valueForKey:@"displayName"];
    profile.profileURL = [object valueForKey:@"profileURL"];

    NSString *rep = [object valueForKey:@"reputation"];
    profile.reputation = [[nf numberFromString:rep] intValue];
    //[rep release];   <-Why not release?

    [nf release];        
    //[object release];  <-Why not release?
    [parser release];
}

我已经注释掉了两行,如果没有,则会给我EXC_BAD_ACCESS 有人可以向我解释为什么发布这些对象是错误的吗?

2 个答案:

答案 0 :(得分:14)

您不应该发布它,因为您没有+alloc-retain-copy它。像+objectWith…这样的便捷构造函数会返回自动释放的对象。

答案 1 :(得分:5)

更好的问题是:为什么应该你释放它?你有什么办法要求拥有对象的所有权?在这种情况下,答案是“什么都没有”。既然你没有它,你就不能很好地发布它。