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];
そして、これはインストゥルメントが割り当てが由来することを示している行です:
#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
内部メソッドを設定- (void)finish
すると、問題が解決します。これは単なる回避策ですが、現在、別の方法を見つけることができません。