Утечка памяти AFNetworking - PullRequest
       11

Утечка памяти AFNetworking

0 голосов
/ 20 марта 2019

Я использовал код ниже, чтобы начать загрузку

AFURLSessionManager *downloadManager1  = [[AFURLSessionManager alloc] initWithSessionConfiguration:NSURLSessionConfiguration.defaultSessionConfiguration];


NSURLSessionDownloadTask *downloadTask;
downloadTask=[downloadManager1 downloadTaskWithRequest:request progress:nil

        destination:^NSURL *(NSURL *targetPath, NSURLResponse *response){

        NSURL *aURL = [[NSFileManager defaultManager] URLForDirectory:NSDocumentDirectory inDomain:NSUserDomainMask appropriateForURL:nil create:NO error:nil];

        return  [aURL URLByAppendingPathComponent:[response suggestedFilename]];

    }completionHandler:^(NSURLResponse *response, NSURL *filePath, NSError *error) {

    }
];
[downloadTask resume];

enter image description here

Сообщено об утечке памяти, я проверил код выше, но не могу найти ни одного неправильного места,

Ваш комментарий приветствуется

Ответы [ 3 ]

0 голосов
/ 25 марта 2019

Я думаю, что утечка происходит при создании менеджера. NSURLSession содержит сохраненную ссылку на делегата. Это может помочь, если вы инициализируете и сохраните менеджер только один раз. Я не уверен, сколько раз вызывается ваш код для datatask.

Оформить заказ https://github.com/AFNetworking/AFNetworking/issues/3787

0 голосов
/ 10 мая 2019
invalidateSessionCancelingTasks:

Это известное и задокументированное поведение.Когда вы закончите сеанс, вызовите invalidateSessionCancelingTasks :.Это не проблема для большинства приложений, которые поддерживают один сеанс на протяжении всего срока службы приложения.

https://github.com/AFNetworking/AFNetworking/issues/1528#issuecomment-26887778

0 голосов
/ 20 марта 2019

У вас есть два указателя, один на downloadManager1 и один на NSURL объект. В зависимости от того, где это вызывается в вашем коде, я подозреваю, что существует постоянная strong ссылка на одну или другую. Попробуйте преобразовать NSURL из указателя в реальный объект, и вместо этого он будет копировать по значению, и убедитесь, что downloadManager высвобождается после завершения работы.

...