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 将被正确释放。