Проблема возникает, когда я пытался выпустить одну из моих переменных экземпляра и переназначить это новое значение.Проблема dealloc с переменными экземпляра
Я хотел бы высказать адрес, на который указывает переменная экземпляра, и повторно назначить ему новое значение.
код выглядеть следующим образом: заголовочных
@interface MapPageController : UIViewController<MKMapViewDelegate> {
AddressAnnotationManager *addAnnotation;
}
- (IBAction) showAddress;
@property (nonatomic, retain) AddressAnnotationManager *addAnnotation;
.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;
}
Однако, с [addAnnotation release]
, EXC_BAD_ACCESS всегда приходит вместе, если процесс проходит через него.
Таким образом, я распечатал адреса памяти в dealloc
из AddressAnnotationManager
:
- (void)dealloc {
NSLog(@"delloc Instance: %p", self);
[super dealloc];
}
Я включил зомби, консоль дал мне что-то вроде этого:
2010-10-10 17:02 : 35,648 [1908: 207] delloc Instance: 0x46c7360
2010-10-10 17: 02: 54,396 [1908: 207] - [Ad dressAnnotationManager release]: сообщение отправлено на освобожденный экземпляр 0x46c7360 *
Это значит, что код достигает dealloc
, прежде чем проблема возникнет.
Я проверил все возможные места, где я мог бы выпустить addAnnotation. Однако я не мог найти.
Неужели кто-нибудь случайно выяснил, в чем проблема?