當我試圖釋放一個實例變量並重新分配一個新值時,會發生問題。實例變量的dealloc問題
我想釋放實例變量指向的地址,併爲其重新分配一個新值。
的代碼如下所示: 的.H
@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總是走來,如果過程中,通過它運行。
因此我在AddressAnnotationManager
的dealloc
印出的內存地址:
- (void)dealloc {
NSLog(@"delloc Instance: %p", self);
[super dealloc];
}
我打開殭屍,控制檯給了我這樣的事情:
2010-10-10 17:02 :35.648 [1908:207] delloc實例:0x46c7360
2010-10-10 17:02:54.396 [1908:207] - [AD dressAnnotationManager發佈]:發送到釋放實例的消息0x46c7360 *
這意味着代碼在問題發生之前達到dealloc
。
我已經檢查了所有可能發佈addAnnotation的地方。但是,我找不到任何。
有沒有人碰巧找到問題所在?