Я тестировал свой текущий проект на утечку, и я в тупике. Я просматривал как сумасшедший и попробовал все, кроме куриного жертвоприношения. Я только что создал крошечное приложение-проект с нуля, и я могу скопировать утечку. Так что либо у 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-адреса пустым), но это не помогло.
Может кто-нибудь помочь?