Проблемы с памятью с UIWebViews - PullRequest
2 голосов
/ 15 февраля 2012

У меня есть контроллер веб-просмотра, для которого я создаю один экземпляр, а затем я изменяю запрос и показываю веб-просмотр, основанный на том, какая строка выбрана в табличном представлении.

// Replace tableView:didSelectRowAtIndexPath with the following
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath*)indexPath
{

CGRect rect = self.view.frame;
CGFloat width = [UIScreen mainScreen].bounds.size.width;
CGFloat height = [UIScreen mainScreen].bounds.size.height;
rect.size.width = width; //self.view.frame.size.width;
rect.size.height = height; //self.view.frame.size.height;
RSSEntry *entry = [_allEntries objectAtIndex:indexPath.row];

page = [[WebViewController alloc] initWithUrl:entry.articleUrl];
page.view.frame = rect;
[self.view addSubview:page.view];

}

Моя проблема в том, чтопосле загрузки некоторых из них, я получаю предупреждения памяти и сбой.

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

Поскольку я делаю только один экземпляр каждого из них, я не понимаю, почему возникает эта проблема.Ранее я каждый раз создавал новый контроллер webview, а затем выпускал его, но у меня была та же проблема.

Вот код для загрузки карты Google:

@interface MapViewController : UIViewController {
    IBOutlet UIWebView *mapPage;
}

// Implement viewDidLoad to do additional setup after loading the view, typically from a nib.
- (void)viewDidLoad {
url_string = @"http://maps.google.fr/maps/ms?msa=0&msid=213119412551786463007.0004b3fb7f4c123377402&z=12";
url = [NSURL URLWithString:url_string];
request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:url_string]];
[request setCachePolicy:NSURLRequestReloadIgnoringLocalCacheData];
mapPage.scalesPageToFit = YES;
mapPage.autoresizingMask = (UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight);
[mapPage loadRequest:request];
[super viewDidLoad];
}

UIWebView созданв построителе интерфейса.

Недостаточно памяти и происходит сбой сразу после окончания загрузки карты или при попытке взаимодействия с картой.Похоже, это та же проблема, что и выше, но на этот раз нет вкладок или нет изменений запроса, который использует UIWebView.

Ответы [ 2 ]

2 голосов
/ 16 февраля 2012

Оказывается, страницы кэшировались.

В методе applicationDidReceiveMemoryWarning моего приложения я добавил строку для очистки кэша.Это исправило оба моих р

- (void)applicationDidReceiveMemoryWarning:(UIApplication *)application {
/*
 Free up as much memory as possible by purging cached data objects that can be recreated (or reloaded from disk) later.
 */
[[NSURLCache sharedURLCache] removeAllCachedResponses];
}
2 голосов
/ 15 февраля 2012

Каждый раз, когда вы выбираете строку в UITableView, вы создаете новый объект WebViewController и добавляете его представление (по какой-то причине?) В представление текущего контроллера.Я не уверен, что вы хотя бы удалили это представление из superview (вам также нужно выпустить WebViewController).И конечно это займет все больше и больше памяти.

И в чем причина создания целого UIViewController и использования его в качестве подпредставления?Почему вы не использовали UINavigationController?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...