Je me suis fait attraper par le bug suivant encore et j'aimerais obtenir des éclaircissements sur la raison pour laquelle c'est un bug.EXC_BAD_ACCESS lorsque vous n'utilisez pas self
J'ai simple UITableView qui charge certaines données:
// myclass.h
@property (nonatomic, retain) NSArray *myData
// myclass.m
@synthesize myData;
- (void) viewDidLoad {
...
myData = someDataSource // note the lack of self
}
- (UITableViewCell *) cellForRowAtIndexPath ... {
...
cell.textLabel.text = [self.myData objectAtIndex:indexPath.row]; // EXC_BAD_ACCESS
}
La première table des charges bien, mais lors du défilement jusqu'à assez que l'une des cellules est totalement hors de la vue que je puis obtenir le EXC_BAD_ACCESS Erreur. Suis-je manquant quelque chose en ce qui concerne @ conserver la propriété. Ma compréhension est qu'il libère tout ce que le pointeur indiquait avant la réaffectation. Si j'ai raison, pourquoi ne pas utiliser soi-même. causer des problèmes?
Merci pour l'aide.
**** Mise à jour
Pourquoi est que dans tous les exemples que j'ai vérifié avec la libération des objets dans la méthode dealloc sans l'auto?
- (void) dealloc {
[someArray release];
[someTableView release];
}
je me rends compte qu'ils sont des méthodes, mais sont-ils pas seulement des emballages autour de la variable myData? Je suppose que la question est pourquoi myData = ... se perdre? – chris
@chris, vous devez appeler la méthode pour que 'retain' se produise - vous mettez une fin de course sur le système en n'ayant pas' self.' dedans. –
Pas vraiment, Carl. Ils ne l'enveloppent pas, ils lui spécifient une interface. Et cette interface arrive à conserver et libérer ce que vous lui donnez. Mais l'affectation aux variables ne l'est pas. Pensez à cette façon: les variables sont en C, donc l'assignation fonctionne comme en C, rien de plus. Mais les messages ne le sont pas, donc ils peuvent faire plus que ce qui est en C. –