为什么UIAlertView需要本地化?

时间:2011-04-25 23:48:14

标签: iphone

我在.h文件中声明了UIAlertView *警报。在func1中分配警报。并显示&在func2中发布。这会导致内存BAD_EXEC_ACCESS问题。

-(void) func1 
{
alert= [[UIAlertView alloc] initWithTitle:nil message:@"To Confirm." delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];

}

-(void) func2
{
[alert show];
[alert release];
}

如果我遵循它就行了。如果所有内容都在一个函数中,那就OK了。为什么呢?

-(void) func1
{
alert= [[UIAlertView alloc] initWithTitle:nil message:@"To Confirm." delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];
[alert show];
[alert release];
}

2 个答案:

答案 0 :(得分:-1)

使用2函数方法,您不会在func1中保留警报,并且此内存正在泄漏。然后,当您在func2中访问警报(显示它)时,它的保留计数仍然为零,并且可能已经被释放。 如果你添加

 [alert retain];

在双功能案例的func1中,它应该可以工作。

对于单个函数,您在同一范围内分配,使用和释放所有函数,因此没有内存问题。

您也可以声明

 @property (nonatomic,retain) UIAlertView *alert;
在.h文件中

,然后在函数中将其引用为self.alert。 一定要@synthesize它,并在dealloc方法中释放它。

答案 1 :(得分:-1)

当你在一个方法中分配它时,你的alertView会丢失范围,然后尝试从另一个方法访问它。

在func1中分配之后调用[alertView retain](并在完成后释放它),或者在func2中分配它