インスタンス変数の1つを解放して、新しい値を再割り当てしようとすると、問題が発生します。
インスタンス変数が指すアドレスを解放し、それに新しい値を再割り当てしたいと思います。
コードは次のようになります。.h
@interface MapPageController : UIViewController<MKMapViewDelegate> {
AddressAnnotationManager *addAnnotation;
}
- (IBAction) showAddress;
@property (nonatomic, retain) AddressAnnotationManager *addAnnotation;
彼ら
@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インスタンス:0x46c7360
2010-10-10 17:02:54.396 [1908:207]-[AddressAnnotationManagerリリース]:割り当て解除されたインスタンス0x46c7360に送信されたメッセージ*
dealloc
これは、問題が発生する前にコードが到達することを意味します。
addAnnotationをリリースできる可能性のあるすべての場所を確認しました。しかし、何も見つかりませんでした。
誰かがたまたま問題が何であるかを見つけますか?