2011-04-03 2 views
1
@interface SearchViewController : UIViewController<UITableViewDelegate, UITableViewDataSource> { 

    NSMutableDictionary * results; 

} 

@property (nonatomic, retain) NSMutableDictionary * results; 

et @synthesize résultats; dans le .mLibération/conservation par NSMutableDictionary

CE CODE se bloquera

NSMutableDictionary * md = [[NSMutableDictionary alloc] init]; 

results = md; 

[md release]; 

CE CODE EST OK

NSMutableDictionary * md = [[NSMutableDictionary alloc] init]; 

results = md; 

Son clair pour moi que le pointeur ne marche pas se conserve, mais je ne sais pas pourquoi, ai-je fait smth. faux?

Répondre

3

vous devez utiliser

self.results = md 

est retenue si MD.

Vous accédez à une propriété avec la syntaxe point. En affectant quelque chose à une propriété avec la syntaxe de point, vous appelez le setter qui conserve la valeur dans votre cas. Sans le point, vous affectez simplement le dictionnaire mutable aux résultats, aucun setter n'est appelé.

Vous pouvez lire à propos de properties in Apple's Objective-C Programming Language, regardez Général Utilisez un peu plus loin sous le paragraphe Syntaxe de points.

+0

si fondamentalement je pourrais faire des résultats = [[NSMutableDictionary alloc] init]; et à viewDidUnload faire la [version des résultats]; et tout irait bien (je n'utilise pas = n'importe où)? ce serait même bien si je ne déclarais même pas une propriété dans ce cas ... non? –

+0

Oui, l'utilisation d'une propriété n'est pas nécessaire. Il y avait un temps avant Objective-C 2.0 quand il n'y avait pas de propriétés du tout. Bien que je doive l'admettre, je les utilise constamment, ils m'aident à bien gérer la mémoire. –

Questions connexes