UIActionSheet 块视图控制器 dealloc
UIActionSheet block view controller dealloc
在我的视图控制器中,我触摸一个按钮启动这个简单的代码
- (IBAction)tapOnButton:(UIButton *)sender
{
UIActionSheet *act = [[UIActionSheet alloc] initWithTitle:@"test" delegate:self cancelButtonTitle:@"aa" destructiveButtonTitle:@"bb" otherButtonTitles:@"cc", nil];
[act showFromRect:CGRectMake(50, 50, 100, 100) inView:self.view animated:YES];
}
-(void)actionSheet:(UIActionSheet *)actionSheet didDismissWithButtonIndex:(NSInteger)buttonIndex
{
if (buttonIndex == 0)
{
}
}
我在屏幕上看到了一个 Actionsheet,点击 Actionsheet 的任意按钮然后关闭。
当我 运行 解雇时,我的 viewcontroller 没有执行 dealloc 。
如果您不触摸按钮并且不打开操作表,dealloc 将起作用。
是个够大的问题。有人在搞事情吗?
我在 ios 8.1.3
很可能一些引用被保留到视图控制器 - 因此它没有被释放。
请尝试在委托方法中将委托显式设置为 nil,如下所示:
- (IBAction)tapOnButton:(UIButton *)sender
{
UIActionSheet *act = [[UIActionSheet alloc] initWithTitle:@"test" delegate:self cancelButtonTitle:@"aa" destructiveButtonTitle:@"bb" otherButtonTitles:@"cc", nil];
[act showFromRect:CGRectMake(50, 50, 100, 100) inView:self.view animated:YES];
}
-(void)actionSheet:(UIActionSheet *)actionSheet didDismissWithButtonIndex:(NSInteger)buttonIndex
{
if (buttonIndex == 0)
{
}
actionSheet.delegate = nil
}
我在 iOS 8 iPad 中使用已弃用的 UIActionSheet 时遇到了同样的问题。使用iPhone(iOS 7 and iOS 8)和iOS 7 iPad,问题无法重现。
目前我测试过的唯一可行的解决方案是使用 UIAlertController 在 iOS 中显示操作表 8. 如果您使用 UIAlertController,View Controller 将被正确释放。
在我的视图控制器中,我触摸一个按钮启动这个简单的代码
- (IBAction)tapOnButton:(UIButton *)sender
{
UIActionSheet *act = [[UIActionSheet alloc] initWithTitle:@"test" delegate:self cancelButtonTitle:@"aa" destructiveButtonTitle:@"bb" otherButtonTitles:@"cc", nil];
[act showFromRect:CGRectMake(50, 50, 100, 100) inView:self.view animated:YES];
}
-(void)actionSheet:(UIActionSheet *)actionSheet didDismissWithButtonIndex:(NSInteger)buttonIndex
{
if (buttonIndex == 0)
{
}
}
我在屏幕上看到了一个 Actionsheet,点击 Actionsheet 的任意按钮然后关闭。
当我 运行 解雇时,我的 viewcontroller 没有执行 dealloc 。 如果您不触摸按钮并且不打开操作表,dealloc 将起作用。
是个够大的问题。有人在搞事情吗?
我在 ios 8.1.3
很可能一些引用被保留到视图控制器 - 因此它没有被释放。
请尝试在委托方法中将委托显式设置为 nil,如下所示:
- (IBAction)tapOnButton:(UIButton *)sender
{
UIActionSheet *act = [[UIActionSheet alloc] initWithTitle:@"test" delegate:self cancelButtonTitle:@"aa" destructiveButtonTitle:@"bb" otherButtonTitles:@"cc", nil];
[act showFromRect:CGRectMake(50, 50, 100, 100) inView:self.view animated:YES];
}
-(void)actionSheet:(UIActionSheet *)actionSheet didDismissWithButtonIndex:(NSInteger)buttonIndex
{
if (buttonIndex == 0)
{
}
actionSheet.delegate = nil
}
我在 iOS 8 iPad 中使用已弃用的 UIActionSheet 时遇到了同样的问题。使用iPhone(iOS 7 and iOS 8)和iOS 7 iPad,问题无法重现。
目前我测试过的唯一可行的解决方案是使用 UIAlertController 在 iOS 中显示操作表 8. 如果您使用 UIAlertController,View Controller 将被正确释放。