Да, вам нужно освободить этот объект. См. Руководство по программированию управления памятью для какао . По сути, если вы когда-либо создаете объект с именем метода, который начинается с alloc
или new
или содержит copy
, вы становитесь владельцем объекта и несете ответственность за его последующее освобождение. Только в том случае, если вы знаете, что вам понадобится объект до завершения программы, можно не освобождать его, и в этом случае операционная система освобождает память после завершения работы приложения.
Если вам нужен только объект в небольшом объеме, вы можете отправить ему сообщение autorelease
. Это добавит его в пул автоматического выпуска. Пул автоматического выпуска периодически отправляет сообщение release
каждому объекту в нем. Это довольно сложно; см. раздел о пулах автоматического выпуска . Например:
В этом случае, однако, поскольку NSURLConnection
являются асинхронными, автоматическое освобождение не будет работать. Вы не знаете точно, когда он будет вызывать ваш объект с данными, поэтому вы хотите убедиться, что объект еще не был освобожден. Единственный способ убедиться, это точно знать, когда вы закончили с объектом, а затем отправить ему сообщение release
.
Все различные функции init*
возвращают указатель на данный объект, поэтому вы можете просто сделать:
NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:request delegate:self];
...
// when done with connection:
[connection release];