在块完成中调用presentModalViewController

时间:2012-12-05 22:02:56

标签: iphone objective-c ios block

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

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];

但应用冻结了,一分钟后打开视图,所以我的问题是如何在块完成时presentemodalviewcontroller?

1 个答案:

答案 0 :(得分: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我们创建了一个弱引用来阻止块创建强引用循环*(很好阅读)现在我们确保将使用我们的视图来实例化当前的新模态视图。 / p>

任何疑问都可以免费提问:)