2011-09-08 49 views
1

我要给你一个简单的问题......我读起IOS 4开发的书,有下面的代码示例:UIAlertView“非阻塞”显示消息确实保留了视图?

UIAlertView *alert = [[UIAlertView alloc] 
           initWithTitle:@”Hello” 
            message:@”This is an alert view” 
            delegate:self 
          cancelButtonTitle:@”OK” 
          otherButtonTitles:nil]; 
[alert show]; 
[alert release]; 

然后,它指出,该节目的消息显示警报视图但代码不会停止它的执行,直到用户关闭对话框,它会继续并执行下面的代码...因为在show消息旁边有一个释放消息,show方法是否保留该视图直到它被解散?否则,我不应该在显示信息发送后才发布它。我很抱歉,但是我没有在参考页面上找到这些信息,所以我希望这不是一个(太多)愚蠢的问题。

OT:如何激活代码片段上的颜色?

+1

我相信'[alert show]'会增加保留计数,因为它是作为子视图添加的,但这实际上不应该成为您的担忧。你分配的项目,所以你应该释放它完成后,你在这种情况下显示语句后 – cpjolicoeur

+0

我只会去这个:'UIAlertView * alert = [[[[UIAlertView alloc] initWithTitle:@“你好“ message:@”This is an alert view“ delegate:self cancelButtonTitle:@”OK“ otherButtonTitles:nil] autorelease];'。然后打电话给show并忘记警报,因为它将在必要时自动释放。 – chown

+0

@cpjolicoeur坦克你..我知道我可以忘记谁保留它,只要我正确地释放它,但它只是了解底层机制,因为我是IOS开发新手,我想了解详细信息: )顺便说一句,我已经读过有关添加视图作为子视图时保留计数的增加,因此它可能是保留警报视图的显示方法。 –

回答

2

显示警报视图的窗口保留其引用,因此您不必这样做。

+0

好吧,所以它被保留时添加为子视图,如上所述。谢谢;-) –

+0

@ an0我知道这是迟到,但这是记录在哪里?我对此也有把握,但我无法在文档中找到具体说明的地方。 –

+0

@NicolaMiotto没有记录。按惯例:API是以这种方式设计的,所以您不必拘泥于警报视图,因为它通常是暂时的。 – an0

0

我想知道这个,并得出结论认为show方法中的某些内容可能会调用addSubview:递增UIAlertView上的保留计数,以防止它被解除分配。

+0

我认为这更可能是保留视图或任何对象将它添加为子视图的show方法..我不认为委托需要保留警报视图,因为它是警报视图,指向事件发生时的委托,而代表通常不会引用它...我是对的吗? –

+0

是的,这样做更有意义。我会修改我的答案 –