Quelle est la meilleure pratique pour conserver et libérer des objets transmis aux méthodes de classe?Comportement de conservation des objets des méthodes de classe Objective-C
Par exemple, si vous avez une "variable de classe" déclarée comme ceci:
static NSString *_myString = nil
... est la bonne chose à faire:
+ (void)myClassMethod:(NSString *)param {
_myString = param;
}
... qui a inconvénient que l'appelant doit maintenir un nombre de retenue non nul sur param afin qu'il ne soit pas libéré prématurément. En variante, on pourrait le faire:
+ (void)myClassMethod:(NSString *)param {
[_myString autorelease];
_myString = [param retain];
}
... qui présente l'inconvénient que, sans une classe de niveau dealloc
appel correspondant il fuite de mémoire. Ou devrait-on éviter complètement ce genre de chicanerie variable de classe, peut-être avec une classe singleton qui gère la vie de ces sortes d'objets d'une manière plus conventionnelle?
Voici Apple's docs on creating a singleton instance.
Le code avec lequel je travaille est le projet de ressource objectif très lisse (mais toujours nouveau) (http://www.iphoneonrails.com/).
Vous posez la mauvaise question. Au lieu de demander comment faire des variables globales, vous devriez demander de l'aide pour vous débarrasser de vos globales. Et oui, même si vous cachez ceci derrière une méthode de classe (ou comme Singleton), c'est toujours une variable globale. – Sven