2010-10-28 4 views
0

J'ai des difficultés à comprendre exactement QUAND les pools autorelease sont créés et publiés dans les applications AppKit. Par exemple, si j'ai une classe ApplicationController qui remplace init, existe-t-il un pool autorelease qui est créé avant son démarrage et est drainé après sa fin?Autorelease pools dans les applications appkit

Répondre

1

Le thread principal d'une application AppKit exécute un événement NSRunLoop pour traiter les événements. NSRunLoop crée un nouveau pool de libération automatique chaque fois qu'il traite un nouvel événement (ou temporisateur) et le draine une fois que le flux de contrôle est retourné à NSRunLoop. Donc, en substance, chaque passage à travers la boucle d'exécution a un nouveau pool autorelease.

+0

Alors quand les objets créés dans init seront-ils libérés? O :-) – cfischer

+1

Une fois que vous avez démarré le runloop, si vous relancez automatiquement un objet, il sera libéré dès que le flux de contrôle reviendra au runloop. Les seules exceptions sont si vous autorelease quelque chose à l'intérieur de 'main()' (qui est en dehors de la boucle d'exécution) ou dans un autre thread. –

+2

Fernando: Ils seront libérés quand ils seront libérés. Les objets que vous ajoutez à un pool d'autorelease sont libérés lorsque le pool se vide. Une piscine que vous créez draine lorsque vous l'égouttez; une piscine créée par la boucle d'exécution s'écoule quand ... eh bien, la réponse vous le dit. –

Questions connexes