Ios objective-c中的UI更新 我的疑惑是关于Objto-C中的UI更新。例如,让我们考虑一下这段代码 myButton.hidden= YES;

Ios objective-c中的UI更新 我的疑惑是关于Objto-C中的UI更新。例如,让我们考虑一下这段代码 myButton.hidden= YES;,ios,objective-c,ios7,uikit,grand-central-dispatch,Ios,Objective C,Ios7,Uikit,Grand Central Dispatch,文档中说,按钮不会立即隐藏,但会在下一次运行循环中完成。它需要多长时间才能被真正隐藏。出于实际目的,是否可以认为它是瞬时的? 我问这个问题是因为当某个过程完成70%时,我需要隐藏一个按钮 // on main thread if (completionPercentage == 70) { myButton.hidden= YES; // some other stuff } 但在进程完成70%后,按钮可能会在几毫秒内保持可见,如果在这段时间内被点击

文档中说,按钮不会立即隐藏,但会在下一次运行循环中完成。它需要多长时间才能被真正隐藏。出于实际目的,是否可以认为它是瞬时的? 我问这个问题是因为当某个过程完成70%时,我需要隐藏一个按钮

// on main thread

    if (completionPercentage == 70)
    {
     myButton.hidden= YES;
    // some other stuff
    }
但在进程完成70%后,按钮可能会在几毫秒内保持可见,如果在这段时间内被点击,应用程序就会崩溃

编辑: 我正在更新这两个进程以及“取消”按钮的功能

Process1正在
NSThread
上运行。myButton的功能是取消运行Process1的线程。当Process1完成70%时,我将在另一个使用Process1数据的进程上执行
高优先级队列
调度\u async
。我们称之为Process2。因此,一旦Process2启动,就不能取消Process1。 因此,在上面提到的
If
块中,一旦进程1完成70%,我就会隐藏
myButton
。但它不会立即隐藏起来,因此问题就来了。希望我已经说清楚了

dispatch_async(dispatch_get_main_queue(), ^{
        [mButton setHidden:YES];
});

它应该是异步的

您是否尝试过使用myButton.enabled=否;或myButton.userInteractionEnabled=NO;在隐藏它之前?@Zhang我没有尝试过,但我怀疑启用属性的行为也会相同。即使它们在下一个运行循环中也会生效。请在dispatch\u async块中尝试此操作。当您点击该按钮时,会执行什么操作?点击按钮的方法是否取决于正在处理的某些数据?奇怪的是,点击一个没有挂在任何东西上的按钮会导致崩溃。在执行其预期代码之前,也许您可以在按钮点击方法中检查completionPercentage>=70?请附加崩溃日志。但If语句已在主队列中。它将有助于从主队列内部在主队列上进行调度。我希望它只会推迟执行,因为它是作为一个单独的块。然而,延迟可以忽略不计。