我在.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];
}
答案 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中分配它