Пожалуйста, помогите! Смотрели на это в течение 12 часов; и посмотрел онлайн и не может найти решение.
В моем приложении я использую 2 элемента управления UIView на отдельных страницах / контроллерах:
Чтобы изолировать мой код и упростить его объяснение, я создал новый проект на основе представления под названием «MyTestApplication»
1 - я добавил простой NSData dataWithContentsOfUrl в функцию делегата.
NSData *imageData = [NSData dataWithContentsOfURL: [NSURL URLWithString:@"http://www.google.com/intl/en_ALL/images/logo.gif"]];
(Здесь нечего выпускать, поскольку все это использует вспомогательные функции)
альтернативный текст http://img.skitch.com/20081110-j5tn5n7ixph95ys4rpchibaw5p.preview.jpg
Просмотр изображения
2 - Запустите его, чтобы проверить отсутствие утечек (как и ожидалось)
альтернативный текст http://img.skitch.com/20081110-fy2qrkgy47hm4fe2f1aakd4muw.preview.jpg
3 - Откройте ViewController.xib и просто добавьте UIWebView из библиотеки (не нужно подключать его)
альтернативный текст http://img.skitch.com/20081110-d63c3yh1a1kqiciy73q8uyd68j.preview.jpg
4 - Запустите его, чтобы проверить, есть ли утечки! (Почему ???) * +1043 *
альтернативный текст http://img.skitch.com/20081110-qtxcfwntbcc3csabda3r6nfjg6.preview.jpg
Что я делаю не так? Пожалуйста, помогите!
Почему NSData вызывает утечку памяти, если я использую UIWebView? Я просто не понимаю Благодарю.
У меня также были проблемы с утечками из NSData dataWithContentsOfURL: в симуляторе iPhone. Я обнаружил, что при использовании другого удобного метода (dataWithContentsOfURL:options:error:) я не получаю утечку памяти.
dataWithContentsOfURL:
dataWithContentsOfURL:options:error:
Мой код выглядел примерно так:
NSURL *url = [NSURL URLWithString:urlString]; NSError *error = nil; NSData *data = [NSData dataWithContentsOfURL:url options:0 error:&error];
Ссылка на документацию
Я думаю, что это то, что происходит:
Когда загружается ViewController.xib, экземпляр UIWebView выделяется и инициализируется. Поскольку вы нигде не подключаете его, его не выпускают. Я думаю, что вам нужно подключить его и освободить его в функции dealloc вашего контроллера представления. Я помню, как вручную выпускал каждый объект, который я создал в xib-файле.
Вы запускаете Leaks на симуляторе? Если это так, будьте осторожны. Симулятор будет пропускать память, а аппарат iPhone - нет. Ни один симулятор никогда не будет идеально соответствовать точному поведению вашего кода на устройстве.
Я бы тоже проверил на устройстве. Я просто сделал то же самое по аналогичной проблеме с UITableViewController, который просачивался в Sim, но не на телефоне.
[NSData dataWithContentsOfURL:url options:0 error:&error] мне не помогло на iOS8.
[NSData dataWithContentsOfURL:url options:0 error:&error]
Но правильно работает:
NSURLRequest* request = [NSURLRequest requestWithURL:imageURL]; NSData* imageData = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil]; [[NSURLCache sharedURLCache] removeCachedResponseForRequest:request];
Производственному коду также потребуются параметры ответа и ошибки.