你能分配一个父类使用自动释放池的对象吗?

时间:2010-01-11 00:19:26

标签: objective-c memory-management

我有一个子类,我使用alloc和init来实例化。在init方法中我去

self = [self initWithRect:spriteManager.imageRect spriteManager:spriteManager.manager];

所以父构造函数正在使用自动释放池。那么这里发生了什么?如果我尝试释放对象,我会收到错误。我应该将我的init方法更改为一个容易构造函数,以符合alloc,copy,new ownership policy吗?

1 个答案:

答案 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(以及它从其超类继承的任何内容)。