почему я не должен выпускать эту строку? - PullRequest
2 голосов
/ 15 февраля 2010

Посмотрите на следующий метод:

-(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 ]

14 голосов
/ 15 февраля 2010

Вы не должны выпускать его, потому что вы не +alloc, -retain или -copy это. Удобные конструкторы, такие как +objectWith…, возвращают автоматически освобожденные объекты.

5 голосов
/ 15 февраля 2010

Лучше задать вопрос: почему следует вы отпустите? Что вы сделали, чтобы претендовать на владение объектом? Ответ в этом случае «ничего». Так как вы не владеете им, вы не можете выпустить его очень хорошо.

...