En regardant le UIWebView docs, il est dit queUIWebView confusion de libération de délégué
Avant de libérer une instance de UIWebView pour lequel vous avez défini un délégué, vous devez d'abord définir la propriété délégué UIWebView à zéro avant de disposer de la Instance UIWebView. Cela peut être fait, par exemple, dans la méthode dealloc où vous disposez de l'UIWebView
Je crée une webview à la volée sur une tapeune cellule UITableView. Je ne suis pas sûr de savoir comment faire le bit "set delegate to nil", car je ne suis pas le UIWebView après son push à la pile de navigation. J'aurais cependant que la méthode dealloc de UIWebView appelait de toute façon la release sur le délégué?
Voici ce que je fais:
UIWebView *webView = [[UIWebView alloc] init];
UIViewController *viewController = [[UIViewController alloc] init];
// Start the webview loading, etc
...
// set the delegate
[webView setDelegate:self];
// Add the webview to the viewcontroller
[viewController setView:webView];
[[self navigationController] pushViewController:viewController animated:YES];
[webView release];
[viewController release];
J'ai l'impression que je devrais écrire
[webView release];
[viewController release];
[self release]; // Releasing the delegate as per the docs.
Mais cela semble un peu bizarre, ou ai-je interpréter correctement?
Il peut encore être important à zéro le pointeur de délégué. Je ne l'ai pas vu avec UIWebview, mais MKMapView va parfois continuer à envoyer des messages de délégué après sa sortie (je ne sais pas pourquoi, semble tomber sous un comportement inattendu pour moi). – pzearfoss
Cela signifie donc que les documents sont probablement trompeurs? Ce que j'ai écrit en premier est correct? –
Notez également qu'Apple recommande de ne pas vérifier retainCount sur les instances au moment de l'exécution, car cela risque d'induire en erreur. – theLastNightTrain