2010-07-18 4 views
0

Si j'ai une classeLibérer un Ivar avec la propriété Copy

@interface Foo { 
    NSString *temp; 
} 

@property(nonatomic, copy) NSString *temp; 

@end 

Je comprends que, lors de la cession, l'ancienne température va obtenir libéré et le nouveau sera affecté à l'aide temp = [newTemp copy]. Et en passant par les règles de gestion de la mémoire, vous êtes censé faire [temp release] dans la méthode dealloc de Foo, non? Ce que je ne comprends pas, c'est ce qui se passe si le setter n'a jamais été utilisé - vous avez toujours le [temp release] dans le dealloc, donc il libère quelque chose avec un nombre de retenue de 0. Quelqu'un peut-il clarifier cela pour moi?

Répondre

3

Il y a deux possibilités.

  1. Puisque vous ne l'avez jamais défini, il s'agit de nil. Envoyer release à nil est très bien. Donc pas de problème là-bas.

  2. Votre routine init est la valeur par défaut de temp. Alors c'est un vrai objet, et l'envoyer release est aussi ok.

Pas de problème tout autour! Dans les deux cas, vous envoyez un message à un objet avec un nombre de retenue de 0.

+0

Ah cela a du sens. Merci d'avoir répondu si rapidement! – Paul