我有一个子类,我使用alloc和init来实例化。在init方法中我去
self = [self initWithRect:spriteManager.imageRect spriteManager:spriteManager.manager];
所以父构造函数正在使用自动释放池。那么这里发生了什么?如果我尝试释放对象,我会收到错误。我应该将我的init方法更改为一个容易构造函数,以符合alloc,copy,new ownership policy吗?
答案 0 :(得分:4)
超类的初始化程序-initWithRect:spriteManager:不将对象放入自动释放池中。命名约定是任何-init ...方法都会设置一个您负责释放的对象。
Xcode为init和dealloc方法提供了有用的代码完成模板。只需按 control-comma ,然后输入“init”或“dealloc”即可。 (您也可以键入init并按下control-comma。)init模板是
- (id) init
{
self = [super init];
if (self != nil)
{
// Your initializations
}
return self;
}
您将self = [super init]
替换为您在上面写的行。
dealloc模板是
- (void) dealloc
{
// Your deallocations
[super dealloc];
}
[super dealloc]
调用超类的-dealloc,它将负责释放它在-initWithRect中设置的任何内容:spriteManager:call(以及它从其超类继承的任何内容)。