Pourquoi initWithRootViewController ne conserve-t-il pas la classe viewController qui lui est transmise?
-
20-08-2019 - |
Question
J'ai un viewController personnalisé appelé SourceListViewController et je l'ajoute à un UINavigationController, dont la vue est ensuite ajoutée à la fenêtre de l'application iphone. Après avoir passé le SourceListViewController à UINavigationController, je libère le sourceListViewController.
SourceListViewController *sourceListVC = [[SourceListViewController alloc] initWithNibName:@"SourceListViewController" bundle:nil];
UINavigationController *navigationController = [[[UINavigationController alloc] initWithRootViewController:sourceListVC] autorelease];
[sourceListVC release];
Dans ce cas, l'application se bloquerait une fois la vue chargée dans le téléphone. Lorsque j'ai commenté la dernière ligne, l'application fonctionne bien. InitWithRootViewController n'est-il pas censé conserver la copie de sourceListVC?
La solution
Vous libérez automatiquement navigationController. Donc, si navigationController est autoreleased (ce qui se passera probablement dans le prochain runloop), sourceListVC le sera aussi.