2012-07-20 119 views
2

有些情况下,您想使用自己的动画呈现警报样式视图控制器(而不是使用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]; 
    }]; 
} 

和呈现对象将不能释放或自动释放视图控制器。内存管理明智我没有看到这个问题。这是不好的做法吗?

+0

你可以'autorelease'的'self'但'removeFromSuperview'就足以让'superview'释放'self'对象。 – holex 2012-07-20 10:04:34

+0

你确定吗?我认为'removeFromSuperview:'会释放视图,但不是视图控制器。 – Morrowless 2012-07-20 10:09:52

+0

是的,你是对的,它只释放'view'。内存管理的一些信息:你不应该释放或释放任何不是由你创建或保留的对象,它会导致内存泄漏。你必须“释放”或“自动释放”你'init','copy','retain'或'new'的对象,否则会导致内存泄漏。简单。 :) – holex 2012-07-20 10:17:34

回答

0

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

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

我假设你已经不叫[self retain]


我什至不知道,你期望它这会工作。你能保证self需要在这一点上释放,为什么不能保留它的对象本身称为release?您是否试图强制selfdealloc

如果self在这点上释放,这是期待self任何其他对象仍然活着是传递消息到零,或者更糟的是,内存可能会被重新分配和这些对象将消息发送到任意对象。

+0

“如果通过引用访问实例变量,则自我保留”。从这里开始:http://developer.apple.com/library/ios/#documentation/cocoa/Conceptual/Blocks/Articles/bxVariables.html – trojanfoe 2012-07-20 10:00:19

+0

我不需要以这种方式释放自己,它只是更方便,因为我不会不需要这样设置委托/回调。视图控制器自行处理。 – Morrowless 2012-07-20 10:07:14

0

这似乎是不好的做法,但没有看到任何影响内存。在模式的看法而言,为什么你不只是弹出回来,如果这就是你想达到使用的是什么:(但我没有看到这一点)

[self.navigationController popViewControllerAnimated:YES]; 
+1

我没有使用导航控制器。 – Morrowless 2012-07-20 10:07:57