UIWebView утечка? Может кто-нибудь подтвердить? - PullRequest
2 голосов
/ 01 апреля 2010

Я тестировал свой текущий проект на утечку, и я в тупике. Я просматривал как сумасшедший и попробовал все, кроме куриного жертвоприношения. Я только что создал крошечное приложение-проект с нуля, и я могу скопировать утечку. Так что либо у UIWebView есть утечка, либо я делаю что-то действительно глупое.

По сути, это сводится к loadRequest: вызову UIWebView объекта, учитывая URLRequest, созданный из NSURL, который ссылается на URL файла, для файла в комплекте приложений, который находится внутри папка, в которую Xcode входит по ссылке. Уф.

Утечка прерывистая, но все равно происходит ~ 75% времени (примерно в 20 тестах это происходило примерно 15 раз). Это только происходит на устройстве - это не утечка в симуляторе. Я тестирую нацелены на iPhone OS 3.1.2 и 3.1.3 на оригинальном (1-го поколения) iPod Touch, который использует iPhone OS 3.1.3.

Чтобы воспроизвести, просто создайте проект с нуля. Добавьте UIWebView к .xib RootViewController, подключите его через IBOutlet. В Finder создайте папку с именем «html» внутри папки вашего проекта. Внутри этой папки создайте файл с именем «dummy.html», в котором есть слово «Test». (Разве не должен быть действительным HTML.) Затем добавьте html-папку в ваш проект в XCode, выбрав «Создать ссылки на папки для любых добавленных папок»

Добавить следующее к viewDidLoad

NSString* resourcePath = [[NSBundle mainBundle] resourcePath];
NSString* filePath = [[resourcePath stringByAppendingPathComponent:@"html"] stringByAppendingPathComponent:@"dummy.html"];
NSURL* url = [[NSURL alloc] initFileURLWithPath:filePath];
NSURLRequest* request = [NSURLRequest requestWithURL:url]; // <-- this creates the leak!
[browserView loadRequest:request];
[url release];

Я пробовал все от установки делегата для UIWebView и реализации UIWebViewDelegate до не установки делегата в IB, не установки делегата в IB и явной установки свойства delegate веб-представления равным nil, использовать alloc / init вместо автоматического освобождения NSURLRequest с (и / или NSURL с) ...

Я попытался ответить на аналогичный вопрос (установка общего кэша URL-адреса пустым), но это не помогло.

Может кто-нибудь помочь?

Ответы [ 2 ]

2 голосов
/ 08 декабря 2010

Забыл об этом вопросе.

Утечка отсутствует в 4.1. Я бы предположил, что то же самое для 4.2.

2 голосов
/ 08 декабря 2010

Попробуйте:

- (void)webViewDidFinishLoad:(UIWebView *)webView {
  [[NSUserDefaults standardUserDefaults] setInteger:0 forKey:@"WebKitCacheModelPreferenceKey"];
}

С http://blog.techno -barje.fr / post / 2010/10/04 / UIWebView-secrets-part1-leaks-on-xmlhttprequest

...