Quand devrais-je libérer l'object delegate]?

J'utilise le code suivant plusieurs fois dans mon application (en particulier pour gérer un NavigationController):

MyAppDelegate *appDelegate = [[UIApplication sharedApplication] delegate]; 

Quand devrais-je le libérer?

Merci d'aider,

Stéphane

Ne pas. Ne libérez jamais votre délégué d'application – il est géré automatiquement par le operating system.

Si vous regardez dans le file main.m de votre application, vous verrez du code qui initialise une instance de UIApplication qui représente votre application. Il est de sa responsabilité de gérer le cycle de vie du délégué de l'application, pas votre responsabilité.

EDIT comme le souligne @Goz, vous devriez le release si vous le retain à un moment donné. Cependant, étant donné que l'object application (et donc, par extension, son délégué) est garanti pour restr dans la scope de l'application ( sauf si vous y allez), il vaut mieux ne pas faire de memory management sur le délégué, car cela évite la possibilité d'une sur-libération accidentelle ou d'autres problèmes connexes.

Réponse courte: ne libérez jamais votre délégué d'application.

Explication:
Cela m'aide souvent à résoudre les problèmes de memory lorsque je vérifie comment les choses sont déclarées. Jetez un oeil comment la propriété de delegate est déclarée pour UIApplication :

 @property(nonatomic,assign) id<UIApplicationDelegate> delegate; 

Comme vous pouvez le voir, il est assigné à une propriété, ce qui signifie que tout ce que mem-mgmt fait ici est juste d'assigner des pointeurs pour une variable d'instance. Cela signifie que l'appel de la release sur votre délégué d'application entraînera l' -dealloc méthode -dealloc pour votre MyAppDelegate . Allez-y et essayez ceci dans le débogueur et vous verrez que votre application recevra EXC_BAD_ACCESS – c'est-à-dire qu'elle va planter.

EDIT: Cependant, comme le suggère Goz, vous pouvez appeler retain puis release . Mais en premier lieu, cela n'a pas de sens de faire cette chose retain/release sur le délégué de l'application.