在NSTimer中调用AFNetworking会导致严重的内存泄漏

我试图debugging一个困难的内存泄漏。 在MyAppDelegate.m中,我有

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { self.notificationTimer = [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(syncNotifications:) userInfo:nil repeats:YES]; return YES; } - (void)syncNotifications:(NSTimer*)timer { NSString *path = @"http://example"; NSLog(@"GET: %@", path); AFHTTPRequestOperationManager *network = [AFHTTPRequestOperationManager manager]; [network GET:path parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) { NSLog(@"get success"); } failure:^(AFHTTPRequestOperation *operation, NSError *error) { NSLog(@"Error: %@", error); }]; } 

我看到内存泄漏的速度〜1MB / 3秒。 我已经尝试将networking设置为属性。 还尝试了如下注释实际的networking请求:

 - (void)syncNotifications:(NSTimer*)timer { NSString *path = @"http://example"; NSLog(@"GET: %@", path); AFHTTPRequestOperationManager *network = [AFHTTPRequestOperationManager manager]; } 

尽pipe我没有看到尽可能多的内存泄漏,但我仍然看到仪器面板上的内存分配正在攀升。 当我谈到NSTimers的内存pipe理时,我是否错过了一些东西?

问题是你AFHTTPRequestOperationManager都在创build一个AFHTTPRequestOperationManager的新实例。 manager方法的实现如下所示:

 + (instancetype)manager { return [[self alloc] initWithBaseURL:nil]; } 

所以,如果你创buildpipe理器一次,并坚持它,你应该能够解决你的内存泄漏。

经过大量的testing,我发现这个“问题”似乎是AFHTTPRequestOperation。 切换到AFHTTPSessionManager时,我没有看到任何“泄漏”。

欲了解更多信息,请参阅: https : //github.com/AFNetworking/AFNetworking/issues/2596