发布的对象崩溃App - alloc / init内存管理问题

时间:2010-09-14 18:16:42

标签: iphone memory-leaks memory-management malloc

我有一个我分配和启动的flipView类。但是,当我发布它时,应用程序崩溃了。如果我不发布它,应用程序工作正常,所以看起来。我发布时收到的错误消息是:

  

Malloc - 对象错误:未释放正在释放的对象指针。

如果你能帮助我,我将不胜感激。

- (IBAction)showInfo {
    FlippedProduceView *flippedView = [[FlippedProduceView alloc]initWithIndexPath:index];

    flippedView.flipDelegate = self;

    flippedView.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;

    [self presentModalViewController:flippedView animated:YES];

    //[flippedView release]; //******** Maybe A Memory Leak *********\\
}

2 个答案:

答案 0 :(得分:2)

将最后一行放在那里是正确的,因为当您将“flippedView”作为“presentModalViewController”的参数传递时,它会在内部保留“flippedView”(无需编写任何其他代码)。

Apple框架中的大多数功能都会保留一个对象,如果它们在逻辑上应该是这样的话。如果您要呈现一个视图控制器,那么实际上并不存在您希望传入已释放(或即将解除分配)的控制器的情况。您在其中显示的包含视图控制器将保留子控制器,直到它被解除。

所以我们很清楚,这里是正确的代码(假设没有其他异常情况):

- (IBAction)showInfo {

// Here the retain count gets incremented to 1 (usually "alloc" or "copy" does that)
FlippedProduceView *flippedView = [[FlippedProduceView alloc]initWithIndexPath:index];

// Retain count is unchanged
flippedView.flipDelegate = self;

// Retain count is unchanged
flippedView.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;

// Retain count is incremented again inside this method (to 2)
[self presentModalViewController:flippedView animated:YES];

// Retain count is decremented by 1 (back to 1)
[flippedView release]
}

// ... Other code

// Finally, whenever the view controller gets dismissed, it will be released again
// and the retain count will be 0, theoretically qualifying it for deallocation

答案 1 :(得分:0)

您的presentModalViewController:消息应致电retain上的flippedView。这将使其免于被释放,直到presentModalViewController:的目的完成。然后,您可以在此例程结束时调用[flippedView release]。除非缺少其他东西?