При инициализации объекта используется авторелиз. Но релиз позже вызывается для объекта

#iphone #objective-c

#iPhone #objective-c

Вопрос:

Мой проект использует в нем код oauthconsumer.

Когда я компилирую и анализирую свой код, я получаю уведомление о том, что «Объект отправлен- авторелиз слишком много раз».

Было бы справедливым предположением, что код был написан намного лучшим инженером, чем я, поэтому я не решаюсь «исправить» это.

Является ли следующий код неправильным?

 - (void)connectionDidFinishLoading:(NSURLConnection *)connection {
    OAServiceTicket *ticket = [[OAServiceTicket alloc] initWithRequest:request
                                                              response:response
                                                                  data:responseData
                                                            didSucceed:[(NSHTTPURLResponse *)response statusCode] < 400];
    [ticket autorelease]; // HERE
    [delegate performSelector:didFinishSelector withObject:ticket withObject:responseData];
    [ticket release], ticket = nil; //HERE
}
  

Это хороший код или автоматическое освобождение следует удалить?

Ответ №1:

Просто удалите автозапуск, и все будет в порядке. Лучший инженер явно допустил ошибку.

Ответ №2:

В показанном сценарии, поскольку ticket он явно освобождается и не возвращается из метода, нет причин добавлять его в пул автоматического выпуска, и autorelease вызов может быть безопасно удален.