0

在我的代码中,我正在使用这个类:

https://github.com/gpambrozio/BlockAlertsAnd-ActionSheets

当我以这种方式按下对话框视图中的按钮时,我想调用 presentModalViewController:

BlockAlertView *alert = [BlockAlertView alertWithTitle:@"Example" message:@"Text"];
[alert setDestructiveButtonWithTitle:@"Ok" block:^{
FirstView *firstView = [[FirstView alloc] initWithNibName:@"FirstView" bundle:nil];
[self presentModalViewController:firstView animated:YES];
}];
[alert show];

但是应用程序冻结了,一分钟后打开视图,所以我的问题是如何在块完成中呈现emodalviewcontroller?

4

1 回答 1

0

实际上有一些错误,首先,当你在一个块内实例化一些类/变量时,它们会响应并且在该块内有生命周期。因此,您的块在另一个线程中运行,这就是原因,通过这种方式,您可能会导致保留周期,这对您的应用程序来说非常糟糕,更改如下:

BlockAlertView *alert = [BlockAlertView alertWithTitle:@"Example" message:@"Text"];
FirstView *firstView = [[FirstView alloc] initWithNibName:@"FirstView" bundle:nil];
__weak typeof(self) weakSelf = self;
[alert setDestructiveButtonWithTitle:@"Ok" block:^{

[weakSelf presentModalViewController: weakSelf.firstView animated:YES];
}];
[alert show];

这样做,使用 __weak typeof 我们创建了一个弱引用,以防止块创建强引用循环*(这很好阅读),现在我们确保将使用我们为当前新模式视图实例化的视图。

如有任何疑问,请免费询问:)

于 2015-08-26T12:12:49.260 回答