В моем приложении, если у меня есть представление, которое было освобождено (через modal увольнение или навигация стека pop), и после этого у меня появляется предупреждение о памяти, мое приложение падает.didreceivememorywarnings сообщение отправлено на освобожденный экземпляр
Я проверил, поставив модальный создать/отклонить очень рано в мое приложение, которое выглядит так:
WWebViewController *webViewController = [[WWebViewController alloc] initWithPath:@"http://www.google.com"];
[webViewController setIsModal:YES];
WMainNavController *navController = [[WMainNavController alloc] initWithRootViewController:webViewController];
[self presentViewController:navController animated:YES completion:nil];
Веб вид довольно прост:
- (void)viewDidLoad
{
[super viewDidLoad];
[self setNavigationDefaultsWithTitle:@"Loading..." withBackButton:YES withSearchButton:YES deepLinked:false];
webView = [[UIWebView alloc] initWithFrame:[self.view bounds]];
webView.delegate = self;
[self.view addSubview:webView];
[webView scalesPageToFit];
[webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:self.path]]];
[self showNoConnectionImageIfNecessary:NO];
// Do any additional setup after loading the view.
}
...
- (void)dealloc {
[webView loadHTMLString:@"" baseURL:nil];
[webView stopLoading];
[[NSURLCache sharedURLCache] removeAllCachedResponses];
[webView setDelegate:nil];
webView = nil;
}
Однако простое представление, а затем отклонение этого представления, сопровождаемое имитацией предупреждения о памяти, дает следующее:
*** -[WMainNavController retain]: message sent to deallocated instance 0xba953c0
Я пробовал это, вызывая WWebViewController непосредственно без WMainNavController, пытался с помощью регулярного навигационный контроллер, пытался просто нажав что-то в стек нав. Он всегда сбой, если я выскочил или отклонил представление в любом месте приложения.
Я делаю что-то принципиально неправильно? Если я прохожу через приложение, не отпуская/выскакивая, он отлично справляется с предупреждениями о памяти, и перед этим будет только один экран, который представляет этот экран как модальный и является корневым представлением программы.
Я предоставлю дополнительную информацию, кто-нибудь видел что-то подобное?
Редактировать - это реализация ARC.
Edit - Вот скриншот из моих инструментов с зомби на:
Он смотрит на меня, как и все нормально. Он освобождается должным образом от увольнения, но по какой-либо причине предупреждающий вызов памяти пытается получить доступ к этому контроллеру представления. У меня полная потеря.
К сожалению, это ARC. Я отредактирую это. – Stakenborg
Вы видите эту проблему, если вы вынимаете все свои дополнительные вызовы 'webView' в' dealloc'? Обычно вы не должны запускать новые асинхронные нагрузки (как 'loadHTMLString: baseURL:' делает) в середине освобождения. –
Большая часть того, что находится в методе dealloc, - это материал, с которым я работал, чтобы справляться с проблемами памяти при освобождении WebView. Глупые вещи всегда пытаются повесить на память. Тем не менее, этот сбой происходит независимо от того, какой вид я увольняю/поп, не обязательно должен быть этот конкретный веб-просмотр (или веб-просмотр в любом месте, может быть любым контроллером представления). Чтобы ответить на ваш вопрос, да, это все равно, если я удалю все эти вещи в моем методе dealloc. – Stakenborg