Использование AFNetworking _convertJSONString сохраняет выделение

Я использую 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 решает проблему. Это всего лишь обходной путь, но я не могу найти другого способа.


person paoloqaz    schedule 26.06.2013    source источник
comment
Да, вы должны отпустить его, как только вы закончите с ним, и он больше не требуется.   -  person AtWork    schedule 26.06.2013
comment
@Abhishek ошибается. При использовании ARC ручное управление памятью не требуется.   -  person mattt    schedule 26.06.2013
comment
Объект JSON, вероятно, удерживается другим объектом в циклической ссылке. Отвлекитесь от AFNetworking и посмотрите, что еще просачивается; вы, вероятно, найдете его быстро.   -  person Steven Fisher    schedule 27.06.2013
comment
Я использовал код выше, больше ничего. Я перепробовал все, что мог, но единственное, что сработало, это установка запроса как нулевого внутри AFNetworking. У вас есть идеи, как я мог бы решить по-другому?   -  person paoloqaz    schedule 27.06.2013


Ответы (1)


Это не проблема. Объекты могут относительно долго жить в памяти, не являясь утечкой.

Не беспокойтесь об этом.

person mattt    schedule 26.06.2013
comment
Я должен беспокоиться, потому что у приложения заканчивается память для этой утечки. Если у вас есть идеи, как я могу решить эту проблему, не касаясь AFNetworking, скажите, пожалуйста. Я бы очень хотел знать, где моя ошибка. Спасибо - person paoloqaz; 27.06.2013