[自我自动释放]可以接受吗?

时间:2012-07-20 09:53:39

标签: objective-c ios memory-management uikit

在某些情况下,您希望使用自己的动画呈现警报样式视图控制器(而不是使用presentModalViewController:animated:UIAlertView)。

释放此视图控制器的正确方法是在视图消失时调用回调,但是设置一个委托,所有这些看起来都有点过分。

所以我这样做:

- (void)dismiss
{
    [UIView animateWithDuration:0.3 delay:0 options:UIViewAnimationOptionCurveEaseIn animations:^{
        self.view.alpha  = 0;
    } completion:^(BOOL finished) {
        [self.view removeFromSuperview];
        [self autorelease];
    }];
}

并且呈现对象不会释放或自动释放视图控制器。内存管理明智我认为没有问题。这是不好的做法吗?

2 个答案:

答案 0 :(得分:0)

我会考虑这种不好的做法。

只有在此对象上调用retain的对象才应在其上调用releaseautorelease

我确实假设你没有打电话给[self retain]


我甚至不确定这会像你期望的那样奏效。你能保证self在那时需要释放吗?为什么保留它的对象本身不能叫release?您是否想强制self加入dealloc

如果此时释放self,那么期望self仍然存活的任何其他对象都会将消息传递给nil,或者更糟糕的是,可能会重新分配内存并且这些对象将消息发送到任意对象。

答案 1 :(得分:0)

看起来不好的做法却看不到任何对记忆的影响。在模态视图方面,为什么不将它弹回来,如果那是你想要实现的目标:

[self.navigationController popViewControllerAnimated:YES];