gpt4 book ai didi

iphone - 需要一些关于异步任务的解释

转载 作者:行者123 更新时间:2023-11-29 04:01:30 25 4
gpt4 key购买 nike

这是我对 iOS 编程了解最少的事情之一。当我使用导航 Controller 推送 View 时,我需要读取一个包含大量数据的文本文件,在创建新 View 时需要大约 2-3 秒的时间来处理。

所以我想异步处理这个文件,以便同时显示 ActivityIndi​​cator。

我已经在其他项目中使用过连接函数(connectionconnectionDidFinishLoading...),但是这里我想要做的不同,因为数据已经是在我的项目文件中,所以不需要连接。

感谢您的帮助和建议。

最佳答案

异步调用(我相信您已经知道)是在单独的线程上调用的东西,而主线程继续前进。 Objective-C 以这种方式运行是因为如果调用是同步进行的,那么 UI(以及与此相关的其他所有内容)将简单地挂起,直到加载数据。

好吧,要在 Objective-C 中执行此操作,您需要某种方法来查询数据。如果它预加载到 Core Data 或 SQLite 中,则它或多或少与被调用的方法相同。

有很多方法可以解决这个问题。我更喜欢 block ,因为它们简单。

[MBProgressHUD showHUDAddedTo:self.view animated:YES];
[User loginWithBlock:^(id responseObject, NSError *error) {
if (!error) {
NSLog(@"response object (the data): %@", responseObject);
[MBProgressHUD hideAllHUDsForView:self.view animated:YES];
}
}];

仅供引用,MBProgressHUD 是事件指示器。

那么,让我们来分解一下。事件指示器被分配并显示在 View 中,并将一直保留到调用该 block 为止,直到加载数据的任务完成后才会调用该 block 。数据加载完成后,该 block 会发送responseObject(您的数据),并隐藏事件指示器。

就这么简单!

编辑:

这实际上更像是一个附加组件,但无论如何。

为了回答您下面的评论,为了进行调用或处理“数据处理”,该 loginWithBlock: 函数被构建为它自己的函数。

+ (void)loginWithBlock:(ObjectResultBlock)block
{
[[APIClient sharedClient] postPath:@"login" parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject)
{
if (block) block(responseObject, nil);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
if (block) block(nil, error);
}];
}

在创建此函数的头文件中声明 block :

typedef void(^ObjectResultBlock)(id responseObject, NSError *error);

此特定示例使用 AFNetworking。但正如我之前所说,从整体上看,一切都相对相同。

那么,让我们来分解一下......

loginWithBlock: 被调用,因此您执行 APIClient 调用,该调用要么成功,要么失败。在完美的世界中,它会成功,然后您可以通过 block 传递responseObject。

关于iphone - 需要一些关于异步任务的解释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15805126/

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