objective-c variables de classe: quand est dealloc appelé?
Si je déclare les variables de classe Objective-C, lorsque la mémoire est libérée?
Si mon interface est:
@interface TestClass : NSObject
{
}
+ (NSString)instanceCount;
@end
Et dans la mise en œuvre, je déclare:
static NSString instanceCount;
Comment puis-je libérer ce niveau de la classe de variable? c'est à dire quand le dealloc appelé pour les variables de classe Objective-C?
Viens de tomber sur cette question lors de l'apprentissage de l'Obj-C. Apple semblent suggérer qu'il n'y a pas une telle chose comme une "variable de classe" et ce que vous avez définies dans l'interface est plutôt une classe méthode, qui est séparé de la variable statique et doit donc être définie dans la mise en œuvre. La variable statique est limitée à la portée de la mise en œuvre fichier, pas la classe elle-même. C'est peut-être un mineur chipote mais il me confond pour une sec: developer.apple.com/mac/library/DOCUMENTATION/Cocoa/Conceptual/...
OriginalL'auteur user79889 | 2009-03-19
Vous devez vous connecter pour publier un commentaire.
La réponse courte à votre question est: "quand le programme se termine."
Les variables statiques sont alloués au tout début de votre programme, avant la
main()
fonction commence. De même, ils seront libérés à la fin de votre programme, peu de temps aprèsmain()
sorties. Cette gestion de la mémoire est gérée par l'Objective-C runtime, et tout se passe derrière les coulisses.Si vous essayez d'analyser ce comportement, vous ne sera probablement pas avoir beaucoup de chance. Par exemple, si vous avez de la suite dans une classe personnalisée, puis utilisé cette classe membre statique d'une autre classe:
Vous ne verrez jamais ce message apparaître dans le journal. Il ya un couple de raisons pour cela. L'une, les variables qui
NSLog()
nécessite peut-être déjà été libéré dans le cadre de la procédure d'arrêt normale. Et de deux, parce que le système d'exécution peut, il suffit de relâcher tout le reste de la mémoire en un seul coup, sans prendre la peine d'appeler ledealloc
méthodes.Cela peut être problématique si votre classe personnalisée fait quelque chose d'important dans sa
dealloc
méthode. Si c'est le cas, envisager la rédaction d'un personnalisécleanup
méthode que vous appelez pour ces objets juste avant que le programme se ferme.Hmm, oui, mais je pensais de cette méthode dans un objet qui a été utilisé comme un membre statique d'une autre classe. J'ai (je l'espère) effacé que dans ma réponse. Je vous remercie pour ça!
OriginalL'auteur e.James