我创建了一个自定义的UIView,称为CustomMessage,我在整个程序中都在使用它。 CustomMessage的外观具有动画效果,因此我在CustomMessage类中编写了一个名为showInView:的方法以显示视图。例如,假设我希望在特定的视图控制器中显示CustomMessage视图-我将使用以下代码:

CustomMessage *myCustomMessage = [[CustomMessage alloc] initWithMessage:@"Hello"];

[myCustomMessage showInView:self.view];


如您所见,这与创建和显示UIActionSheet的方式非常相似。

但是,我在内存管理方面遇到问题。如果我将下面的代码行直接放在上面的两行之后:

[myCustomMessage release];


然后(按预期)该程序将崩溃并显示message sent to deallocated instance错误。

我不确定在CustomMessage类中需要做什么,以便可以在调用showInView:方法后直接释放对象,以免发生内存泄漏。显然,这是可以做到的,因为UIActionSheet是这样工作的(但是我只是无法理解如何实现类似的东西-我不知道CustomMessage对象如何被其他对象保留)对象,大概是显示self.viewCustomMessage(在上面的示例中),以避免它在仍在使用时完全释放对象)。

除了这个小方面,其他所有东西都可以正常工作,所以任何帮助将不胜感激:)

最佳答案

我需要在showInView:中查看您的CustomMessage.m代码。我希望它看起来像以下内容。

- (void)showInView:(UIView *)view
{
    // pre-animation configuration
    [view addSubview:self];
    // do the animation
}


这意味着CustomMessage实例由view保留。另外,如果showInView的实现完全使用并发,则有可能立即返回以允许释放MyCustomMessage,然后后台操作试图访问释放对象。我只是在猜测没有看到您的代码。

什么是崩溃日志?在什么上下文中将什么消息发送到什么对象?此信息将定位问题。

如果以上方法均不能帮助您解决问题,请发布您的showInView代码以及崩溃日志中的详细信息,我将再次进行研究。

关于iphone - showInView:自定义UIView的方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5684560/

10-12 04:41