У меня есть приложение, которое остается открытым в течение длительного времени, делая периодические вызовы API на наш сервер с AFNetworking 2.5.0. В iOS 8.x я наблюдаю постоянное увеличение объема памяти при каждом вызове API, что в конечном итоге приводит к сбою из-за нехватки памяти.
Я выбросил весь свой код, чтобы просто использовать AFNetworking (и iOS под ним), и все еще вижу этот рост памяти. Вот очень простой пример, который воссоздает то, что я вижу: запустите приложение и начните выполнять HTTP GET.
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
self.manager = [AFHTTPRequestOperationManager manager];
// Don't block out text/html extensions, for this example.
_manager.responseSerializer = [AFXMLParserResponseSerializer serializer];
_manager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"text/html", nil];
[self getApiLoop];
return YES;
}
- (void) getApiLoop {
[_manager GET:@"http://www.stackoverflow.com" parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) {
NSLog(@"Success!");
// Do it again
dispatch_async(dispatch_get_main_queue(), ^{
[self getApiLoop];
});
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"Failure!");
// Do it again
dispatch_async(dispatch_get_main_queue(), ^{
[self getApiLoop];
});
}];
}
Я запустил тот же пример на iOS 7.0 и не вижу такого же безудержного роста памяти.
Instruments предполагает, что CFNetworking использует malloc и не освобождает часть памяти под ним.
Любые обходные пути? Нужно ли нам сообщать об ошибке в Apple?