gpt4 book ai didi

cocoa-touch - 如何在任务完成 block 中更新 UI?

转载 作者:行者123 更新时间:2023-12-03 16:12:34 25 4
gpt4 key购买 nike

在我的应用程序中,我在发送 HTTP 请求之前让进度指示器开始动画。完成处理程序在 block 中定义。获得响应数据后,我隐藏 block 内部的进度指示器。我的问题是,据我所知,UI 更新必须在主线程中执行。我怎样才能确定它?

如果我在窗口 Controller 中定义一个更新UI的方法,并让 block 调用该方法而不是直接更新UI,这是一个解决方案吗?

最佳答案

此外,如果您的应用程序面向 iOS >= 4,您可以使用 Grand Central Dispatch:

dispatch_async(dispatch_get_main_queue(), ^{
// This block will be executed asynchronously on the main thread.
});

当您的自定义逻辑无法轻松地使用 performSelect... 方法采用的单个选择器和对象参数来表达时,这非常有用。

要同步执行 block ,请使用 dispatch_sync() – 但请确保当前不在主队列上执行,否则 GCD 将死锁。

__block NSInteger alertResult; // The __block modifier makes alertResult writable
// from a referencing block.
void (^ getResponse)() = ^{
NSAlert *alert = …;
alertResult = [NSAlert runModal];
};

if ([NSThread isMainThread]) {
// We're currently executing on the main thread.
// We can execute the block directly.
getResponse();
} else {
dispatch_sync(dispatch_get_main_queue(), getResponse);
}

// Check the user response.
if (alertResult == …) {

}

关于cocoa-touch - 如何在任务完成 block 中更新 UI?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7205547/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com