Как выпустить NSURLConnection в iPhone (цель C)

Я использовал эту строку кода во многих местах своего проекта под различными функциями:

NSURLConnection *theConnection = [[NSURLConnection alloc] initWithRequest: theRequest delegate:self];

Теперь получаю обычное предупреждение «Неиспользуемая переменная theConnection». Я также знаю, что это утечка памяти.

Можно использовать следующий код?

NSURLConnection *theConnection = [[NSURLConnection alloc] initWithRequest: theRequest delegate:self];
[theConnection release];

Если я отпущу объектConnection, возникнут ли проблемы с такими методами делегата, как didReceiveData, connectionDidFinishLoading и т. Д.?

И если приведенное выше утверждение может решить проблему утечки памяти без проблем, как избавиться от предупреждения «Неиспользуемая переменная бла-бла ..»?


person necixy    schedule 14.04.2011    source источник


Ответы (2)


Я думаю ты можешь использовать это

[[NSURLConnection alloc] initWithRequest:request delegate:self];

Я не думаю, что это покажет предупреждение

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

theConnection = [[NSURLConnection alloc] initWithRequest: theRequest delegate:self];

Вы можете избежать утечки, выпустив theConnection на основе вашего кода в dealloc или каким-либо другим способом.

person visakh7    schedule 14.04.2011
comment
Имеет ли эта строка: '[[NSURLConnection alloc] initWithRequest: request delegate: self];' не течет память? - person necixy; 14.04.2011
comment
Да, вот почему я дал вам другой вариант в своем ответе - person visakh7; 14.04.2011
comment
Если я использую [[NSURLConnection alloc] initWithRequest:request delegate:self]; вместо NSURLConnection *theConnection = [[NSURLConnection alloc] initWithRequest: theRequest delegate:self];, то при использовании анализатора я получаю предупреждение о ПОТЕНЦИАЛЬНОЙ УТЕЧКЕ ПАМЯТИ. :( - person necixy; 14.04.2011
comment
Да, вы получите утечку памяти, поэтому я предоставил вам возможность сделать это iVar. - person visakh7; 14.04.2011

Now I'm getting an usual warning "Unused variable theConnection". I also know that its leaking memory.

Причина появления предупреждения из-за того, что вы не используете объект theConnection,

если вы не хотите, чтобы функция delgate не вызывалась для этого экземпляра, установите delegate как nil вместо self

[[NSURLConnection alloc] initWithRequest:request delegate:nil];

ИЗМЕНИТЬ:

В вашем классе .h:

NSURLConnection* m_URLConnection;

В классе .m:

-(id) init
{
  m_URLConnection = [[NSURLConnection alloc] initWithRequest:request delegate:nil];
}
-(void) dealloc
{
  [m_URLConnection release];
  m_URLConnection = nil ;
}
person Jhaliya - Praveen Sharma    schedule 14.04.2011
comment
Эй, я хочу, чтобы были вызваны делегаты! :) Что мне теперь делать? - person necixy; 14.04.2011
comment
Спасибо за обновленный ответ, но я использовал свою строку кода так много раз, что изменить всю структуру кода практически невозможно. Буду очень признателен, если вы предоставите решение, в котором мне не нужно менять структуру кода. :) - person necixy; 14.04.2011