iOS 8.x+;网络内存增长
我有一个长期开放的应用程序,使用AFNetworking 2.5.0定期对我们的服务器进行API调用。在iOS 8.x上,我看到每次API调用都会带来永久内存增长,最终导致内存不足崩溃 我把所有的代码都用在了AFNetworking(以及下面的iOS)上,但仍然看到了内存的增长。下面是一个非常基本的示例,它将重新创建我看到的内容:启动应用程序并开始使用HTTP GETiOS 8.x+;网络内存增长,ios,afnetworking,afnetworking-2,Ios,Afnetworking,Afnetworking 2,我有一个长期开放的应用程序,使用AFNetworking 2.5.0定期对我们的服务器进行API调用。在iOS 8.x上,我看到每次API调用都会带来永久内存增长,最终导致内存不足崩溃 我把所有的代码都用在了AFNetworking(以及下面的iOS)上,但仍然看到了内存的增长。下面是一个非常基本的示例,它将重新创建我看到的内容:启动应用程序并开始使用HTTP GET - (BOOL)application:(UIApplication *)application didFinishLaunch
- (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上运行了相同的示例,但没有看到这种失控的内存增长
仪器显示,CFC网络正在失效,不会释放一些内存
有解决办法吗?我们需要向苹果公司提交一个bug吗?我找到了一个适合我的代码库的解决方案,很高兴与大家分享 AFNetworking 2.x有两个入口点:
- AFHTTPSessionManager.m-推荐用于针对iOS 7和iOS 8的应用程序
- AFHTTPRequestOperationManager.m-推荐用于需要返回iOS 6的应用程序
- initWithBaseURL
- getResponseSerializer-(显式命名,以免混淆)
- getRequestSerializer-(显式命名,以免混淆)
- setResponseSerializer-(显式命名,以免混淆)
- setRequestSerializer-(显式命名,以免混淆)
- 使用setValue:forHTTPHeaderField设置标题:
- 得到
- 放
- 职位
- 删除
- 。。。以及取消操作的能力
可能与此AFNetworking问题有关:请尝试其中提到的修复程序,看看是否有效。也会遇到类似的行为。重复使用AFN网络呼叫导致的OOM错误。