어쩌면 너무 오래 작동하지만이 문제가 발생했을 수 있습니다 ... 추상화를 시도해 보겠습니다. 실제 이름은 중요하지 않습니다.개체 할당 해제가 작동하지 않습니다
나는 사람들은 dynamicaly 및 activeCar를 저장하는 객체 내가 작성, 나는 볼보에 대한 속성을했습니다 내 게임 클래스에서
@property (nonatomic, strong) Volvo *volvo;
@property (nonatomic, strong) BMW *bmw;
@property (nonatomic, strong) Car *activeCar;
BMW를 수퍼 클래스에서 상속 20+ 클래스, 자동차
@interface Car : NSObject;
@interface Volvo : Car;
@interface BMW : Car; etc...
를했습니다 in property activeCar
_bmw = [[BMW alloc] init];
_activeCar = _bmw;
이제 재시작 방법에서 나는 능동 차가되고 싶다. b 두 로그 모두 동일한 주소를 가리키고 있지만 로그에서 wokring은 아닙니다.
_activeCar = nil; // dealloc on BMW and Car is not called
// _bmw = nil; // dealloc is called properly on BMW and Car class
어떻게 관리 할 수 있습니까? 이것이 유일한 해결책입니까?
if ([_activeGame isKindOfClass:[BMW class]])
_bmw = nil;
귀하의 앱이 이상하게 모델링되었다고 생각합니다. 왜 자동차 브랜드는 Car 클래스 인스턴스의 또 다른 속성이 아닌가? – bbum
저는 실제 앱에서 자동차를 사용하지 않습니다. 상속을 설명하기위한 것입니다. 어쨌든, bmw와 volvo는 특정 메소드, 속성 등을 가진 새로운 클래스가 아니라 이름입니다. – alexhajdu
일반적으로 'isKindOfClass :'를 많이 사용하면 코드 냄새가납니다. 응용 프로그램의 아키텍처가 매우 불안정하다는 것을 나타냅니다. 그러한 내성을 시도하고 제거하기 위해 디자인을 재고하는 것이 좋습니다. – bbum