나는 기본적인 iPhone 메모리 관리 질문이 있습니다.iphone sharedAccelerometer 메모리 오류
은 내가 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는 포인터입니다. null 로의 포인터를 설정할 수 있어야합니다. 그러나, BAD_ACCESS는 sharedAccelerometer를 0으로 설정하려는 것과 거의 같습니다.
탑이 정확하고 두 번째가 올바르지 않은 이유를 설명 할 수 있습니까? (제 3 번째 라인이 실패한 이유를 알고 있습니다)
'self.accelerometer'에 액세스하기 위해 속성을 사용합니다. – Geoffroy
또한 dealloc을 공백으로 남겨두면 가속도계를 해제하는 것처럼 보이며 BAD_ACCESS로 프로그램이 터집니다. – Tommy
이 댓글을 볼 수도 있습니다. http://stackoverflow.com/questions/4044421/using -self-on-ivars-in-dealloc/4044731 # 4044731 – Suz