我正在尝试调试困难的内存泄漏。在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秒的速度泄漏。我已经尝试将网络设置为属性。还尝试按如下方式注释掉实际的网络请求:
- (void)syncNotifications:(NSTimer*)timer {
NSString *path = @"http://example";
NSLog(@"GET: %@", path);
AFHTTPRequestOperationManager *network = [AFHTTPRequestOperationManager manager];
}
虽然我没有看到泄漏的内存量,但我仍然看到“仪器”面板中的内存分配有所增加。在NSTimers的内存管理方面,我是否遗漏了一些内容?
答案 0 :(得分:2)
问题是您每秒都在创建AFHTTPRequestOperationManager
的新实例。 manager
方法的实现如下所示:
+ (instancetype)manager {
return [[self alloc] initWithBaseURL:nil];
}
因此,如果您创建一次管理器并坚持使用它,您应该能够修复内存泄漏。
答案 1 :(得分:0)
经过大量测试后,我发现了"问题"似乎与AFHTTPRequestOperation有关。我没有看到任何"泄漏"切换到AFHTTPSessionManager时。
有关更多信息,请参阅: https://github.com/AFNetworking/AFNetworking/issues/2596