Когда я должен выпустить эти объекты в цель-с? - PullRequest
0 голосов
/ 10 октября 2011

Я новичок в программировании obj-c.Итак, когда я должен выпустить определенные объекты?Нужно ли мне выпускать urlRequest, ответ, данные и контент?

- (NSString*)getContentFromUrl:(NSURL*)url {
    NSMutableURLRequest *urlRequest = [[NSMutableURLRequest alloc] init];
        [urlRequest setHTTPMethod:@"GET"];
        [urlRequest setURL:url];
    NSHTTPURLResponse *response = NULL;
    NSData *data = [NSURLConnection sendSynchronousRequest:urlRequest 
                            returningResponse:&response 
                            error:nil];
    NSString *content = NULL;
    if ([response statusCode] >= 200) {
        content = [[NSString alloc] initWithData:data encoding:NSISOLatin1StringEncoding];
    }
    [content autorelease];
    return content;
}

1 Ответ

1 голос
/ 10 октября 2011

Вы должны выпустить только urlRequest.response, data уже созданы как объекты с автоматическим освобождением, а content получает сообщение об автоматическом освобождении перед возвратом (я бы предложил заменить две последние строки просто на return [content autorelease]).

Также более распространена инициализацияуказатели на объекты nil вместо NULL.

Какао имеет соглашение, если вы вызываете alloc, copy, retain или new на любом из объектов при инициализации или переназначении их вамдолжны release их, если они не получат сообщение autorelease после создания.

Вы можете видеть из своего кода, что только urlRequest и content переменные создаются с использованием метода alloc, следовательно, они должныбыть [авто] выпущенным.

обновление с учетом комментариев

Если у вас есть urlRequest в качестве переменной экземпляра, ранее инициированная переменная может скрывать ивар, и вы можете получитьв различные неприятности (например, EXC_BAD_ACCESS).Вам лучше выбрать другое имя для локальной переменной.

...