Не можете удалить подпредставление?
Это о веб-браузере.
У меня есть собственный класс, который обрабатывает веб-страницы.
SNBrowserView
SNBrowserViewPage
У SNBrowserViewPages есть два объекта.
WKWebView
UIImageView // Snapshot of the WKWebView
Функция поддерживает или восстанавливает страницу для управления памятью.
(Тестирование) Каждый раз, когда выбрана страница, я вызываю функцию восстановления.
Выбор:
- (void)browserView:(SNBrowserView *)browserView didSelectPage:(SNBrowserViewPage *)page
{
if (page.sustained) {
[page recoverAnimated:NO];
}
}
Sustain:
- (void)sustain
{
_sustained = YES;
if (_webView) {
_webView = nil;
[_webView removeFromSuperview];
}
_snapshotView = [[UIImageView alloc] init];
_snapshotView.frame = CGRectMake(0.0, 0.0, self.frame.size.width, self.frame.size.height);
_snapshotView.image = _snapshot;
[self addSubview:_snapshotView];
}
Восстановление:
- (void)recoverAnimated:(BOOL)animated
{
_sustained = NO;
_webView = [[WKWebView alloc] init];
_webView.frame = CGRectMake(0.0, 0.0, self.frame.size.width, self.frame.size.height);
_webView.navigationDelegate = self;
_webView.UIDelegate = self;
[self addSubview:_webView];
[self sendSubviewToBack:_webView];
[self loadURL:_initialURL]; // Start loading as early as possible.
if (animated) {
[UIView animateWithDuration:0.3
animations:^{
_snapshotView.alpha = 0.0;
}
completion:^(BOOL finished){
_snapshotView = nil;
[_snapshotView removeFromSuperview];
}];
}
else {
_snapshotView = nil;
[_snapshotView removeFromSuperview];
}
}
Когда я пытаюсь восстановить страницу, снимок экрана не устанавливается на ноль и не удаляется из суперпредставления.
Как это вообще возможно?
Даже это не сработает
- (void)recoverAnimated:(BOOL)animated
{
_snapshotView = nil;
[_snapshotView removeFromSuperview];
}
SnapshotView - это подпредставление, removeFromSuperview всегда должно работать, почему его БОЛЬШЕ?
1 ответ
Решение
Я предлагаю вам попробовать заменить все ваши
_view = nil;
[_view removeFromSuperview];
с
[_view removeFromSuperview];
_view = nil;
потому что то, что вы делаете, это установка _view
в nil
а затем удаление nil
из супервизии.