Когда к разъединению вызова на делегате NSURLConnection?

Используйте пользовательское правило FxCop что использование нежелательного флагов MyClass<>.

5
задан Kampai 7 August 2014 в 18:27
поделиться

3 ответа

Это будет зависеть от того, какой объект обработчик является и как вы его используете. Например, я обычно использую self в качестве своего делегата:

[[NSURLConnection alloc] initWithRequest: запрос делегата: self];

Мне не нужно вызывать освобождение для self , потому что делегаты не сохраняются, а self ] будет освобожден другим объектом.

Если обработчик является новым объектом, вам придется освободить его (и connectionDidFinishLoading: должно быть в порядке, если только вам не нужно использовать обработчик для чего-то еще).

Знакомы ли вы с правилами управления памятью в Какао ?

Можете ли вы лучше представить, что такое обработчик объекта и как вы это используете?

3
ответ дан 14 December 2019 в 04:41
поделиться

Вам необходимо разорвать соединение, не делегат. Я думаю, что класс NSURLConnection не сохраняет делегата, поэтому вы получаете сбой, когда пытаетесь освободить его.

Два места для разрыва соединения - это соединение: DidFinishLoading и соединение: didFailWithError.

0
ответ дан 14 December 2019 в 04:41
поделиться

обработчик объекта используется для реализации connectionDidFinishLoading didReceiveData и т. Д. Я делаю много обращений к нескольким веб-службам, и вместо того, чтобы создавать по одному объекту для каждой, у меня есть центральный класс для всего этого:

@interface DataService : NSObject {} 

- (void) search:(NSString *) name byAddress:(NSString *)address; 

@end 

, поэтому реализация этого метода создает делегат для передачи:

SearchDelegate *delegate = [[SearchDelegate alloc] init]; 
[self sendRequestToUrl:urlString withJson:jsonString andHandler:delegate];

what В инструментах я вижу утечку памяти в SearchDelegate ... так что я думаю, что на самом деле она сохраняется.

Немного поработав, я изменил свой sendRequestToUrlMethod так:

// http code setup blah...

[[NSURLConnection alloc] initWithRequest:request delegate:handler];
[handler release];

, и это похоже на избавились от сообщений об утечке памяти в Instruments.

-1
ответ дан 14 December 2019 в 04:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: