2010-05-11 6 views
1

Je subclassed NSObject:Les propriétés doivent-elles être désaffectées?

#import <Foundation/Foundation.h> 


@interface STObject : NSObject { 
    NSString *message_type; 
    NSString *twitter_in_reply_to_screen_name; 
} 

@property(nonatomic, copy) NSString *message_type; 
@property(nonatomic, copy) NSString *twitter_in_reply_to_screen_name; 

@end 

Ma mise en œuvre ressemble:

#import "STObject.h" 

@implementation STObject 
@synthesize message_type, twitter_in_reply_to_screen_name; 

@end 

Ai-je besoin de créer une méthode dealloc pour mes deux propriétés où je libérer les chaînes?

Répondre

4

Oui. Les propriétés ne seront pas automatiquement -release 'd avec @synthesize.

-(void)dealloc { 
    [message_type release]; 
    [twitter_in_reply_to_screen_name release]; 
    [super dealloc]; 
} 
+3

Ou, de manière équivalente, 'self.message_type = nil; self.twitter_in_reply_to_screen_name = nil; ' –

+0

Je préfère libérer les variables d'instance, car votre programme va exploser si vous faites référence à l'ivar après son désallocation; par conséquent, définir comme «néant» empêchera votre programme d'exploser, mais il cachera également les bogues. –

+0

Jonathan Sterling: C'est seulement un problème si vous le faites * après * l'envoi de [super dealloc] ', et c'est un problème de quelque façon que vous le fassiez. La bonne solution consiste à envoyer vous-même les messages 'release' (ne pas utiliser les propriétés, au cas où les accesseurs - qui peuvent avoir été remplacés - ne sont pas purs http://developer.apple.com/mac/library/documentation/DeveloperTools/gcc -4.0.1/gcc/Fonction-Attributs.html # index-g_t_0040code_007bpure_007d-function-attribute-1206) et faire '[super dealloc]' dernier. –

Questions connexes