Используйте пользовательское правило FxCop что использование нежелательного флагов MyClass<>
.
Это будет зависеть от того, какой объект обработчик
является и как вы его используете. Например, я обычно использую self
в качестве своего делегата:
[[NSURLConnection alloc] initWithRequest: запрос делегата: self];
Мне не нужно вызывать освобождение для self
, потому что делегаты не сохраняются, а self
] будет освобожден другим объектом.
Если обработчик
является новым объектом, вам придется освободить его (и connectionDidFinishLoading: должно быть в порядке, если только вам не нужно использовать обработчик
для чего-то еще).
Знакомы ли вы с правилами управления памятью в Какао ?
Можете ли вы лучше представить, что такое обработчик объекта
и как вы это используете?
Вам необходимо разорвать соединение, не делегат. Я думаю, что класс NSURLConnection не сохраняет делегата, поэтому вы получаете сбой, когда пытаетесь освободить его.
Два места для разрыва соединения - это соединение: DidFinishLoading и соединение: didFailWithError.
обработчик объекта используется для реализации 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.