我正在使用 AFNetworking,但在使用 JSON 调用 POST 时遇到了问题。我在 base64 中上传了几张图像,我注意到即使我上传了所有内容,_convertJSONString 或相关内容仍在内存中。应该是我创建 NSURLRequest 时 AFNetworking 应用的 JSON 转换,实际上应该被释放。我不知道我是否遗漏了什么,但这是一种奇怪的行为。
这是我如何在客户端内实现请求的示例:
NSMutableURLRequest *request = [self requestWithMethod:@"POST" path:path parameters:params];
AFJSONRequestOperation *operation = [AFJSONRequestOperation JSONRequestOperationWithRequest:request
success:^(NSURLRequest *request, NSHTTPURLResponse *response, id JSON) {
completionBlock(JSON, response, nil);
failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error, id JSON) {
completionBlock(nil, response, error);
}];
[self enqueueHTTPRequestOperation:operation];
这是 Instrument 说分配来自的行:
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wassign-enum"
[request setHTTPBody:[NSJSONSerialization dataWithJSONObject:parameters options:0 error:&error]];
#pragma clang diagnostic pop
这是一部分:
- (NSMutableURLRequest *)requestWithMethod:(NSString *)method
path:(NSString *)path
parameters:(NSDictionary *)parameters
在 AFHTTPClient.m
提前感谢您的任何帮助或解决方案。
第一个解决方法
我发现AFURLConnectionOperation里面的NSURLRequest的内容在操作完成后并没有完全释放,这会导致泄漏。设置self.request = nil
inside- (void)finish
方法解决了这个问题。这只是一种解决方法,但我目前找不到另一种方法。