Я использую AFNetworking и столкнулся с проблемой при вызове POST с JSON. Я загружаю несколько изображений в base64 и заметил, что даже если я загрузил все, _convertJSONString или что-то связанное все еще остается в памяти. Должно быть преобразование JSON, примененное AFNetworking, когда я создал NSURLRequest, который на самом деле должен быть выпущен. Я не знаю, если я что-то упускаю, но это странное поведение.
Это пример того, как я реализую запрос внутри своего клиента:
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
Заранее спасибо за любую помощь или решение.
ПЕРВОЕ ВРЕМЕННОЕ РЕШЕНИЕ
Я обнаружил, что содержимое NSURLRequest внутри AFURLConnectionOperation не полностью освобождается после завершения операции, и это вызывает утечку. Установка self.request = nil
внутри метода - (void)finish
решает проблему. Это всего лишь обходной путь, но я не могу найти другого способа.