Утечка NSURLConnection

Я следую официальному образцу Apple

http://developer.apple.com/mac/library/DOCUMENTATION/Cocoa/Conceptual/URLLoadingSystem/Tasks/UsingNSURLConnection.html

Изучая свой код с помощью Instruments, я обнаружил утечку, вызванную невыпущенным NSURLRequest. Теперь я включил [request release] вскоре после

NSURLConnection *conn=[[NSURLConnection alloc] initWithRequest:request delegate:self];     

и это, кажется, работает. Я прав?

С Уважением


person neil    schedule 26.11.2009    source источник


Ответы (2)


Запрос автоматически освобождается, что означает, что пул автоматического выпуска должен позаботиться о его выпуске. Если вы используете это в приложении Cocoa, у вас должна быть автоматическая настройка пула автоматического освобождения, который будет обрабатывать освобождение автоматически выпущенных объектов.

Если вы работаете над приложением, отличным от какао, вам придется настроить его самостоятельно и обязательно освободить/слить пул, чтобы освободить свои объекты.

Как правило, вам нужно только освободить объекты, созданные с помощью alloc, copy, mutableCopy или если вы отправили их retain. Это означает, что вам придется освободить объект подключения, который вы создали с помощью [[NSURLConnection alloc] init..., иначе это вызовет утечку.

Вот ссылка на документ о пулах Autorelease.

person hallski    schedule 26.11.2009

Ах я вижу. По некоторым причинам я смешал «официальный» образец со своей собственной реализацией :) В моем коде я делал это:

NSURLRequest *request = [[NSURLRequest alloc] initWithURL: url];

и это, конечно, должно быть выпущено. Образец, о котором я упоминал выше, ведет себя иначе. Кажется, вчера было довольно поздно.

Тем не менее, большое спасибо за ваш ответ.

Одна вещь меня сводит с ума: я не получаю уведомления по электронной почте, если кто-то отвечает на мои вопросы, хотя я поставил маркер...

С Уважением

person neil    schedule 27.11.2009