Un problème est survenu lorsque j'essayais de libérer une de mes variables d'instance et de réaffecter une nouvelle valeur.problème dealloc avec les variables d'instance
J'aimerais libérer l'adresse vers laquelle pointe une variable d'instance et lui attribuer à nouveau une nouvelle valeur.
Le regard de code comme ceci: Le .h
@interface MapPageController : UIViewController<MKMapViewDelegate> {
AddressAnnotationManager *addAnnotation;
}
- (IBAction) showAddress;
@property (nonatomic, retain) AddressAnnotationManager *addAnnotation;
Le .m
@synthesize addAnnotation;
- (IBAction) showAddress {
if(addAnnotation != nil) {
[mapView removeAnnotation:addAnnotation];
[addAnnotation release]; // this generates the problem
addAnnotation = nil;
}
addAnnotation = [[AddressAnnotationManager alloc] initWithCoordinate:location];
addAnnotation.pinType = userAddressInput;
addAnnotation.mSubTitle = addressField.text;
}
Cependant, avec [addAnnotation release]
, un EXC_BAD_ACCESS est toujours le long si le processus traverse.
Ainsi j'ai imprimé l'adresse mémoire dans le dealloc
de AddressAnnotationManager
:
- (void)dealloc {
NSLog(@"delloc Instance: %p", self);
[super dealloc];
}
Je me suis tourné sur Zombie, la console m'a donné quelque chose comme ceci:
2010-10-10 17:02 : 35,648 [1908: 207] delloc instance: 0x46c7360
2010-10-10 17: 02: 54,396 [1908: 207] - [annonce dressAnnotationManager release]: message envoyé à l'instance désaffectée 0x46c7360 *
Cela signifie que le code atteint dealloc
avant que le problème se produise.
J'ai vérifié tous les endroits possibles où je pourrais publier addAnnotation. Cependant, je n'en ai pas trouvé.
Est-ce que quelqu'un trouve quel est le problème?