gpt4 book ai didi

iphone - iOs后台线程中的函数调用

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

在我的 iPhone 应用程序中,我有一个按钮,单击按钮我调用 Web 服务并获取一些链接,之后我需要下载这些链接中的文件。单击按钮会弹出一个 View ,单击“确定”按钮将替换为进度条,并显示下载进度。下载完成后,进度条将再次被按钮替换。我在这里遇到的问题是,如果互联网连接速度很慢,UI 将被阻止,并且“确定”按钮将保持按下模式,直到它完全从服务器获取详细信息,然后才会出现进度条。我想在单击 OK 按钮后立即显示进度条,它不应该锁定 UI。我使用了以下方法:

    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 
(unsigned long)NULL), ^(void) {
[self download];
});

在这种情况下,UI 没有锁定,但是进度条没有出现。我用
    [self performSelectorInBackground:@selector(download) withObject:nil];

在这种情况下,UI 没有阻止,但它会显示下载按钮,直到它从服务器获取详细信息。只有这样它才会显示进度条。

以及下载的代码流程:
- (void)download{
//Creating a custom progressview
myprogressView = [[CustomProgressView alloc]initWithFrame:CGRectMake(25, 138, 100, 28)];
[cell.contentView addSubview:myprogressView];
[cell bringSubviewToFront:myprogressView];

//Calling the methods for getting the details from the server

//after some internal process, start download
[self.myQueue go];
}

请分享你的想法

最佳答案

尽量不要在任何后台线程中更改 UI。所有与 UI 相关的任务都应在主线程上执行。。您可以调用委托(delegate)方法来更新 UI 数据一进来...

在这里,我可以看到您正在后台线程中执行与 UI 相关的任务……原因是 UIKit 不是线程安全的……:/

关于iphone - iOs后台线程中的函数调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11625154/

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