代码之家  ›  专栏  ›  技术社区  ›  Vegar

为什么我不能释放这个字符串?

  •  2
  • Vegar  · 技术社区  · 14 年前

    请看以下方法:

    -(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_访问权限。
    有人能给我解释一下为什么释放这些物体是错误的吗?

    2 回复  |  直到 14 年前
        1
  •  14
  •   NSResponder    14 年前

    你不应该释放它,因为你没有 +alloc , -retain -copy 信息技术方便的构造函数,比如 +objectWith…

        2
  •  5
  •   Chuck    14 年前

    更好的问题是:为什么 应该 你释放它?你做了什么来声明对该物品的所有权?在这种情况下,答案是“什么都没有”。因为你不拥有它,所以你不能很好地发布它。