直接释放对象

时间:2011-10-24 06:33:44

标签: objective-c memory-management garbage-collection dealloc

我还在学习Objective-C并且有一条规则,它永远不会直接直接释放对象。我不明白这意味着什么。

有人能举例说明这条规则被打破了吗?

这是应该如何完成的。

正确的方式

-(id)someMethod {
Class *object = [[Class alloc]init];
[object someMethod];
[object release];
}

以上认为是正确的。

那么糟糕的方式是什么?提前谢谢。

3 个答案:

答案 0 :(得分:4)

  

永远不要直接释放对象

这意味着你永远不应该直接向对象发送-dealloc消息 - 唯一有效的情况就是在dealloc实现中将dealloc发送到超类:

- (void)dealloc{
   ...
   [super dealloc];
}

另请注意,使用ARC(自动引用计数)时,即使在这种情况下也不应调用dealloc。

答案 1 :(得分:2)

  

永远不会直接直接释放对象

这意味着您不应直接调用deallocate object方法:

-(void)someMethod {
    Class *object = [[Class alloc]init];
    [object someMethod];
    [object release];    // <- it is correct
    [object dealloc]; // <- error here!
}

答案 2 :(得分:1)

不正确的方法是直接调用[object dealloc],这会破坏对象。一旦没有人再保留它,release就会调用它。