Я использую AFNetworking (2.3.1) для анализа данных JSON и отображения их в меток.Остановка асинхронного запроса блока при выходе из системы (AFNetworking; iOS)
Для этого я использую setCompletionBlockWithSuccess
, который указан в AFHTTPRequestOperation.h
.
Три функции, как это в настоящее время называется на viewDidLoad
, один выглядит следующим образом:
-(void)parse {
NSURL *url = [[NSURL alloc] initWithString:kURL];
NSURLRequest *request = [[NSURLRequest alloc] initWithURL:url];
AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request];
operation.responseSerializer = [AFJSONResponseSerializer serializer];
[operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {
NSLog(@"Parse Successful");
//Code for JSON Parameters and to display data
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"%@", [error localizedDescription]);
//Code for Failure Handling
}];
[operation start];
}
В то время как это работает как шарм, так как он содержится в запросе блока, этот процесс продолжается в течение всего состояния приложения. Поэтому, когда эти данные не нужно отображать, запросы по-прежнему загружаются, и я получаю предупреждения о памяти из-за этих блоков.
Мой вопрос в том, как я могу остановить, отменить или приостановить эти процессы после того, как я покинул контроллер просмотра, чтобы они были созданы, чтобы сохранить память и данные или правильно их обработать?
Простите меня, если это очевидный ответ, и я просто управляю или создаю блоки совершенно неправильным способом. Я новичок в AFNetworking и Blocks, операциях, асинхронных запросах и т. П.
Спасибо.
Я проверил отмену операции раньше, но есть проблема. Как только я объявляю операцию за пределами инструкции void (так, чтобы ее можно было отменить), я получаю предупреждение, которое вы можете увидеть здесь (http://i.imgur.com/yGDhrfX.png). Я понимаю, что это связано с объявлениями вроде __weak, __block и т. Д. Можете ли вы указать мне в правильном направлении здесь? Кроме того, NSOperations можно запустить снова, как только они будут отменены, не так ли? –
Предупреждение в ссылке, вероятно, связано с тем, что переменная bTCAverage является переменной экземпляра класса и к ней обращаются изнутри блока, что позволяет создать цикл сохранения. Я уточнил свой ответ с более конкретным примером. – Brandon