解除分配对象不起作用

时间:2013-07-10 21:16:27

标签: objective-c class pointers

也许我工作太久但是有这个问题...... 让我们把它抽象化,真实的名字并不重要。

我有20多个类继承自其超类Car

@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;

我动态创建这些对象并将activeCar存储在属性activeCar

_bmw = [[BMW alloc] init];    
_activeCar = _bmw;

现在在重启方法中,我希望能够使用nil active car,但即使在日志中我看到两者都指向同一地址,它也不会w:

_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;

2 个答案:

答案 0 :(得分:2)

您的activeCar实际上始终保留两次,因为您有两个strong属性引用它。因此,您可以使activeCar无效,但仍会设置其他属性。

如果您想要将汽车变为activeCar,那么在将其设置为activeCar后,您可以直接将另一个参考作为零。

答案 1 :(得分:2)

如果你想要在摧毁activeCar时摧毁宝马,那么无论如何都无法将宝马保持为ivar。

_activeCar = [[BMW alloc] init];

你目前的实施不会让宝马无所适从,因为self.bmw仍然提到它。