showInView:自定义UIView的方法

时间:2011-04-16 04:53:35

标签: iphone ios memory-management uiview uiviewcontroller

我创建了一个名为UIView的自定义CustomMessage,我在整个程序中使用了该CustomMessageCustomMessage的外观已设置动画,因此我在名为showInView:的{​​{1}}类中编写了一个方法来显示视图。例如,假设我希望在特定视图控制器中显示CustomMessage视图 - 我将使用以下代码:

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

[myCustomMessage showInView:self.view];

正如您所看到的,这与创建和呈现UIActionSheet的方式非常相似。

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

[myCustomMessage release];

然后(正如预期的那样)程序将因message sent to deallocated instance错误而崩溃。

我不确定我需要在CustomMessage类中做什么,这样我可以在调用showInView:方法后直接释放对象,这样我就不会出现内存泄漏。显然这可以做到,因为这是UIActionSheet的工作方式(但我无法理解我如何实现类似的东西 - 我无法弄清楚CustomMessage对象是如何实现的由其他一些对象保留,可能是显示self.view的{​​{1}}(在上面的例子中),以避免在它仍在使用时完全释放对象。

除了这个小方面外,其他一切都很完美,所以任何帮助都会非常感激:)

1 个答案:

答案 0 :(得分:2)

我需要在showInView:中查看CustomMessage.m的代码。我希望它看起来像下面这样。

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

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

什么是崩溃日志?什么消息发送到什么上下文中的对象?此信息将本地化问题。

如果以上都不能帮助您解决问题,请发布showInView的代码以及崩溃日志中的详细信息,我会再看看。