2010-08-27 3 views
10

У меня проблема с использованием UIWebViews, я видел тот же вопрос здесь, но ответа не было. вопрос здесь: UIWebView memory management. Я процитирую это:uiwebview и огромная потеря памяти

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

Если я использую инструменты для обнаружения утечек, я их не обнаруживаю. Однако выделено много объектов, и я подозреваю, что это связано с UIWebViews.

Когда веб-релиз освобождается, потому что больше не требуется, кажется, что не вся память освобождена. Я имею в виду, что после запроса на мой сервер приложение создает UITableView и многие веб-просмотры (инструменты говорят о 8 Мб). Когда пользователь отбрасывает назад, все они освобождаются, но использование памяти уменьшается только на 2-3 Мбайта, а через 5-10 минут с помощью приложения происходит сбой.

Я создал простую тестовую программу и получил те же результаты.

Это Tableview, я создаю DetailsView так:

DetailsVC *detailViewController = [[DetailsVC alloc] initWithNibName:@"DetailsVC" bundle:nil]; 
detailViewController.n = indexPath.row; 
[self.navigationController pushViewController:detailViewController animated:YES]; 
[detailViewController release]; 

в DetailsVC У меня есть WebView, созданный в IB. Я загружаю HTML как это:

NSString *urlAddress; 
if (self.n == 0) 
{ 
    urlAddress = @"http://www.google.com"; 
} 
else 
{ 
    urlAddress = @"http://www.yahoo.com"; 
} 

NSURL *url = [NSURL URLWithString:urlAddress]; 

NSURLRequest *requestObj = [NSURLRequest requestWithURL:url]; 

[self.webView loadRequest:requestObj]; 

Я также:

- (void)viewDidUnload { 
self.webView = nil; 
} 

Вот это, каждый раз, когда я выбираю любую WebView в RootViewController я теряю 2-3 Мб памяти, Есть ли решение к этой проблеме?

Спасибо.

+0

кажется очень старой и хорошо известной проблемой, люди сталкиваются с ней с 2008 года и до сих пор не имеют решения (((((http://discussions.info.apple.com/thread.jspa?threadID=1729697 – Burjua

+0

Хорошо, Я нашел одну идею о том, как обойти эту проблему, она описана здесь: http: //www.iphonedevsdk.com/forum/iphone-sdk-development/34840-uiwebview-memory-crash-caching-memory-useage.html. Я не могу решить, что это единственный способ сделать это, любые другие мысли? Спасибо – Burjua

+0

Возможный дубликат [Имеет ли UIWebView утечка памяти?] (http: // stackoverflow.com/questions/648396/does-uiwebview-leak-memory) –

ответ

0

Я предполагаю, что с тех пор, как вы установили webview = nil, вы потеряете любой шанс освободить его.

+0

Я пробовал с ним и без него, это на самом деле не имеет значения, он освобождается, но освобождается не только часть памяти – Burjua

+1

Установка свойства сохранения в nil также освобождает предыдущее значение. –

3

Просто проверьте следующее 1. Является ли у сделать WebView как свойство удалить его 2. И поместите следующий код в didFinishLaunchingWithOptions в Appdelegate

NSURLCache *sharedCache = [[NSURLCache alloc] initWithMemoryCapacity:0 diskCapacity:0 diskPath:nil]; 
    [NSURLCache setSharedURLCache:sharedCache]; 
    [sharedCache release]; 

Я думаю, что тогда ур проблема решена

+0

Хорошо, спасибо, я попробую – Burjua

+1

Нет, к сожалению это не помогает: (( – Burjua

0

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

  • Вы должны set Cache policy к вашему NSURLRequest объекта и проверить политику, игнорирующих кэша данных, см documentation.

  • Поскольку у вас есть вызов release в вашем коде, я предполагаю, что вы используете ARC, поэтому почему вы не вызываете [super dealloc] в viewDidUnload()?

  • Посмотрите эту тему, как cleanForDealloc с использованием UIWebView.

  • Это UITableViewController? с пользовательскими ячейками? Попробуйте освободить (release, removeFromSuperView, установить нуль) их также.

Надеюсь, это поможет!

Смежные вопросы