2009-11-26 3 views
1

Я после официального Apple, Sampleутечки NSURLConnection

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

При рассмотрении моего кода с инструментами я нашел утечку, при несоответствии выпущенной NSURLRequest. Я теперь включал [request release] вскоре после

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

и это похоже на работу. Я прав?

С уважением

ответ

2

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

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

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

Вот ссылка на документ о Autorelease Pools

0

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

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

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

Однако большое спасибо за ваш ответ.

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

С уважением

Смежные вопросы