2010-09-22 3 views
0

В моем приложении у меня есть большая проблема памяти
добавить UIScrollView с видом ViewController динамически, когда мне нужно
и я правильно удалить ViewController во время прокрутки.
и в этом ViewController я поместил UIWebiew в IBOutlet и нагрузку WebView какUIWebView проблема памяти

[m_objWebView loadRequest:[NSURLRequest requestWithURL: 
        [NSURL URLWithString:@"http://stackoverflow.com/"]]]; 

и высвобождает UIWebView в viewControllers dealloc

- (void)dealloc { 

m_objWebView.delegate=nil; 
[m_objWebView stopLoading]; 
[m_objWebView release]; 
m_objWebView=nil; 

[[self.view subviews] makeObjectsPerformSelector:@selector(removeFromSuperview)]; 

[super dealloc]; 
} 

но после 5/6 минут моего приложения падает после предупреждения памяти.

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

помочь мне заранее спасибо

+0

Как вы создаете веб-представление? Почему вы не выпускаете 'view'? –

ответ

2

Удаление подвидов из просмотра UIViewController в dealloc на ненужно. Свойство view и все его подпункты будут автоматически выпущены по мере выпуска владельца (UIViewController). Все, что вам нужно сделать, это освободить все сохраненные вами свойства. Предполагая, что вы объявили m_objWebView в @property (неатомический, сохранить) IBOutlet UIWebView * m_objWebView, то все, что вам нужно:

- (void)dealloc { 

m_objWebView.delegate=nil; 
[m_objWebView stopLoading]; 
[m_objWebView release], m_objWebView=nil; 

[super dealloc]; 
} 

Итак, я предлагаю вам взглянуть на, где и когда вы сохраняете/отпустить ViewController, вот где вы все еще можете оптимизировать вещи. Что касается задержки загрузки веб-контента - ну, это недостаток ленивой загрузки: ленивый сохраняет потребление памяти до минимума, но, как предполагает термин, это не быстро.

+0

спасибо Элис ван. Есть ли способ предварительно загрузить UIwebview? с содержимым loacl в папке с документами –

+0

Как я написал ответ, мне было интересно то же самое. Я предполагаю, что если вы заранее знаете URL (-ы), вы можете кэшировать представление с помощью NSKeyedArchiver/NSKeyUnarchiver. Но тогда вам нужно будет выяснить, когда и как проверить новый контент. С другой стороны, возможно, набор WebView имеет методы, которые касаются именно этой проблемы - я не знаю достаточно о UIWebView, NSURL и его братьях, чтобы сообщить вам об этом. Удачи. –

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