也许我工作太久但是有这个问题...... 让我们把它抽象化,真实的名字并不重要。
我有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;
答案 0 :(得分:2)
您的activeCar
实际上始终保留两次,因为您有两个strong
属性引用它。因此,您可以使activeCar
无效,但仍会设置其他属性。
如果您想要将汽车变为activeCar
,那么在将其设置为activeCar
后,您可以直接将另一个参考作为零。
答案 1 :(得分:2)
如果你想要在摧毁activeCar时摧毁宝马,那么无论如何都无法将宝马保持为ivar。
_activeCar = [[BMW alloc] init];
你目前的实施不会让宝马无所适从,因为self.bmw仍然提到它。