【发布时间】:2013-09-13 14:14:43
【问题描述】:
这很奇怪,我敢肯定我在这里遗漏了一些基本的东西。
我拥有的是
- 两个 UIButton:button1、button2
- Touchdown button1 有一个名为 startAction 的 IBAction
- Touchdown button2 有一个名为 cancelAction 的 IBAction
- 在故事板中创建了所有这些
发生的情况是,当我按下 button1 时,for 循环开始。在此 for 循环结束之前,我无法再按屏幕上的任何按钮,即我无法按下按钮 2。
我怎样才能做到这一点,当我按下 button1 时,我仍然可以通过按下 button2 来取消 button1 的 for 循环动作。这是我的代码
static bool scanCancelled = NO;
-(IBAction)startAction
{
for (int i=0; i<5000; i++)
{
NSLog(@"i: %d ...", i);
if (scanCancelled == YES)
{
break;
}
}//end for-loop
}
-(IBAction)cancelAction
{
scanCancelled = YES;
}
对于任何对未来感兴趣的人,我就是这样做的
-(IBAction)startAction2
{
//reset it
scanCancelled = NO;
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,
(unsigned long)NULL), ^(void) {
[self startAction];
});
}
【问题讨论】:
-
这一切都在主线程上运行。您的循环在执行时阻塞了线程。
-
你的
for循环阻塞了主线程,阻止了任何事件的发生。
标签: ios objective-c cocoa-touch uibutton