2009-11-08 5 views
0

NSURLConnection * соединение является свойством классаУтечки NSURLConnection - Почему?

@property (nonatomic, retain) NSURLConnection *connection; 

Instruments сообщает, что я утечки объект NSURLConnection во второй строке кода ниже.

NSURLRequest *request = [[NSURLRequest alloc] initWithURL:_url]; 
self.connection = [[NSURLConnection alloc] initWithRequest:request delegate:self]; 
[request release]; 

В делегированных селекторов didFinishLoading и didFinishWithError, я выпускаю подключение и настройка на ноль

[self.connection release]; 
self.connection = nil; 

Я прочитал "NSURLConnection leak?" пост и несколько других. Я чувствую, что я должен упустить что-то совершенно очевидное. Помогите?

+0

Поскольку вы сохраняете собственность, почему бы вам не освободить соединение сразу после присвоения его собственности? – falstro

ответ

3

Как говорится в комментарии от икры, вы назначаете соединение (сохраняете счет 1), а затем сохраняете его снова с свойством соединения (сохранить счет 2). Вы отпускаете только один раз в селекторах делегатов. У вас есть два варианта:

1) Измените свойство соединения для назначения, а не сохранения.

@property (nonatomic, assign) NSURLConnection *connection; 

// OR, since assign is the default you may omit it 

@property (nonatomic) NSURLConnection *connection; 

2) Отпустите выделенный объект после того, как она удерживается вашей собственности соединения:

NSURLRequest *request = [[NSURLRequest alloc] initWithURL:_url]; 
NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:request delegate:self]; 
self.connection = connection; 
[connection release]; 
[request release]; 

Вариант 2 является предпочтительным, так как там меньше шансов на наличие утечек, так как Alloc и выпуск находятся ближе друг к другу насколько это возможно. Кроме того, если вы забудете выпустить предыдущее соединение, синтезированные методы выпустят предыдущий для вас. Не забудьте освободить self.connection в dealloc.

+0

Спасибо большое! – TomH

+0

К сожалению, я хотел сказать «как сказала икра». Рад помочь. –

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