各位,
我想听听您对以下场景的看法。我的应用程序上的大多数屏幕都是表格 View ,其中表格 View 的行数和内容是通过首先从本地核心数据表读取数据,然后对其执行一些复杂的计算来确定的。我希望以一种当用户从一个屏幕转换到另一个屏幕时应用程序不会卡住的方式来执行此操作。我是这样做的。在 View 中确实出现了函数,我开始为事件指示器设置动画,然后生成一个线程以从核心数据表中读取数据并对其执行所有相关计算。在该线程内,计算完成后,我停止事件指示器的动画,标记初始化已完成的标志,然后重新加载 TableView 。在初始化完成之前加载 TableView 单元格将返回空单元格。 (我注意到 TableView 数据源函数在 viewWillAppear 之后和 ViewdidAppear() 之前立即调用)。下面粘贴的是我的代码:
-(void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
NSLog(@"%s",__FUNCTION__);
}
-(void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
NSLog(@"%s",__FUNCTION__);
[activityOutlet startAnimating];
dispatch_async(myQueue, ^{ [self getFromCoreData];
});
}
- (void) getFromCoreData {
// Get from coredata and start calculations here
[activityOutlet stopAnimating];
activityOutlet.hidden = YES;
[tableOutlet reloadData];
}
我想知道是否有更好的方法来执行上述操作。
预先感谢您的回复!
最佳答案
UI 更新必须在主线程上完成:
- (void)viewDidLoad {
[super viewDidLoad];
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
[self getFromCoreData];
dispatch_async(dispatch_get_main_queue(), ^{
activityOutlet stopAnimating];
activityOutlet.hidden = YES;
[tableOutlet reloadData];
});
});
}
- (void) getFromCoreData {
// Get from coredata and start calculations here
}
关于ios - 在 View 初始化期间执行数据密集型计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11383811/