2010-10-28 10 views
1

Quelle est la meilleure approche en termes de:Gestion de la mémoire: méthodes de rétention/libération manuelle ou d'accès?

  • sécurité et le contrôle des fuites?
  • performance?
  • visibilité extérieure de la classe?

Première: en gardant le contrôle de chaque variable

if (objectProperty_ != anObject) { 
    [objectProperty_ release]; 
    objectProperty_ = [anObject retain]; 
} 

Deuxième: déclarer les propriétés et l'utilisation des accesseurs et de laisser le système faire le travail

@property (nonatomic, readwrite, retain) NSObject *objectProperty; 
... 
@synthesize objectProperty = objectProperty_; 
... 
self.objectProperty = anObject; 

Merci.

Répondre

2

Utilisez les propriétés autant que possible. Ils vous évitent de devoir écrire beaucoup de méthodes d'accès standard. Dans les jours précédant les propriétés, probablement tous les programmeurs Cocoa avaient une paire de macros qu'ils utilisaient pour définir les accesseurs.

  • @property documente automatiquement la sémantique de l'accesseur. Par exemple dans votre exemple, je peux voir à partir de l'interface que objectProperty conserve sa valeur, plutôt que de l'assigner ou de le copier. Le point 2 est également valable lorsque vous déclarez des propriétés mais que vous définissez vos propres accesseurs.

  • 1

    L'approche la plus susceptible de préserver votre santé mentale est d'utiliser des accesseurs écrits par Apple lorsque vous le pouvez, et d'écrire les vôtres quand vous le devez.

    L'appel de la méthode accesseur ajoute un peu de temps; J'ai chronométré cela sur mon iPad, et je pense que c'était environ 10^-7 secondes. Cela devrait être vrai, que vous écriviez vous-même la méthode ou que vous utilisiez Apple. Dans toutes les situations, sauf les plus extrêmes, il est peu probable que cela ait de l'importance.

    1

    Moins de code signifie moins de bogues, il suffit donc d'utiliser la propriété pour obtenir un ensemble si vous devez déclarer une propriété en lecture-écriture pour un accès public.