这是我的问题:我有一个应用程序必须进行数百万次计算(这是为了发表一篇科学论文)。
所以为了加快计算速度,我学到了一点关于线程的知识并做了这个:
dispatch_queue_t myFirstQueue =
dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0);
dispatch_group_t group = dispatch_group_create();
dispatch_group_async(group, myFirstQueue, ^{
[Magic defineListOfSameDonInParticule:sharedData.particle];
NSMutableDictionary *results = [Magic
meanResultForSameDonInParticule:sharedData.particle];
});
在Magic.m
我有一个名为的方法defineListOfSameDonInparticule:
,其中有:
[particule.donorsList enumerateKeysAndObjectsWithOptions:NSEnumerationConcurrent
usingBlock: ^(id keyA, Molecule *alpha, BOOL *stop){
[particule.donorsList enumerateKeysAndObjectsWithOptions:NSEnumerationConcurrent
usingBlock: ^(id keyB, Molecule *beta, BOOL *stop2){
if ([alpha isNotEqualTo:beta]) {
float distance = [self distanceBetweenMolecule:alpha
andMolecule:beta];
[alpha.closestSame setObject:[NSNumber numberWithFloat:distance]
forKey:beta.molID];
[appDelegate increaseProgressionMeterByOne];
}
}];
在这段代码中,我[appDelegate increaseProgressionMeterByOne]
向我的应用程序委托发送了一条消息,该委托又将 incrementBy:1 发送到我的进度条
但是我所有的线程都被同时发生的数百万次计算使用,所以 UI 冻结,我的 progressBar 没有前进。
需要注意的是:我的进度条在程序的其他不使用多线程的部分工作正常
有没有办法强制更新用户界面?或者您对如何解决这个问题有任何想法?
我知道更新 UI 会减慢应用程序的速度,但对于应用程序的目标用户来说,这是必要的!
非常感谢 !
更新 :
这是在 AppDelegate 中更新 UI 的代码
- (void)increaseProgressionMeterByOne {
[progressBar incrementBy:1];
}