2

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

释放此视图控制器的正确方法是在视图消失时调用回调,但设置一个委托和所有这些似乎都是多余的。

所以我这样做:

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

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

4

2 回答 2

0

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

只有调用过这个对象的对象才retain应该调用它。releaseautorelease

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


我什至不确定这是否会像您期望的那样工作。你能保证那时self需要释放吗?为什么保留它的对象不能调用release自己?你想强迫selfdealloc

如果self此时被解除分配,则任何其他期望self仍处于活动状态的对象都会将消息传递给 nil,或者更糟的是,内存可能会被重新分配,并且这些对象将向任意对象发送消息。

于 2012-07-20T09:56:48.373 回答
0

这似乎是不好的做法,但对记忆没有任何影响。就模式视图而言,如果那是您想要实现的目标,为什么不直接将其弹出:

[self.navigationController popViewControllerAnimated:YES]; 
于 2012-07-20T10:01:04.597 回答