也許我工作時間太長,但有這個問題... 讓我們把它抽象化,真名不重要。釋放對象不起作用
我已經20多類從其超繼承,租車
@interface Car : NSObject;
@interface Volvo : Car;
@interface BMW : Car; etc...
在我的遊戲類我已經爲沃爾沃財產,寶馬
@property (nonatomic, strong) Volvo *volvo;
@property (nonatomic, strong) BMW *bmw;
@property (nonatomic, strong) Car *activeCar;
我創建這些對象dynamicaly和存儲activeCar在財產積極汽車
_bmw = [[BMW alloc] init];
_activeCar = _bmw;
現在在重新啓動方法我想能夠無主動車,b即使在日誌中我看到兩者都指向同一地址:
_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