У меня есть фундаментальный вопрос об управлении памятью iPhone.
У меня есть объект со свойством UiAccelerator: .h:
@interface AccelerationController : NSObject <UIAccelerometerDelegate>
{
UIAccelerometer *accelerometer;
}
@property (nonatomic, retain) UIAccelerometer *accelerometer;
.m:
self.accelerometer = [UIAccelerometer sharedAccelerometer];
self.accelerometer.updateInterval = .5;
self.accelerometer.delegate = self;
Когда я освобождаю экземпляр AccelerationController, вызывается dealloc.
- (void)dealloc
{ self.accelerometer.delegate = nil; // WORKS
// self.accelerometer = nil; WHY DOES THIS BLOW UP THE PROGRAM?
//[self.accelerometer release]; CANT DO THIS BECAUSE WE NEVER ALLOCATED IT
[super dealloc];
}
Я не понимаю, почему первая строка функции dealloc работает, а вторая - нет.self.accelerometer является указателем.Вы должны быть в состоянии установить указатель на ноль.Однако, это терпит неудачу с BAD_ACCESS, почти как его попытка установить sharedAccelerometer в ноль.
Может кто-нибудь объяснить мне, почему вершина верна, а вторая неверна?(Я знаю, почему не получается третья строка)