gpt4 book ai didi

ios - iPad 上的后台计算会阻塞用户界面

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:44:52 27 4
gpt4 key购买 nike

我正在尝试使用背景线程在 iPad 上进行一些计算。问题是即使你的计算也在运行。用户界面在运行时被阻塞...我做错了什么。

[mc evaluateFormula:adapted runNo:10000];

这是从 IBAction 中调用的。

这是被调用的代码:

-(void)evaluateFormula:(NSDictionary *)frm runNo:(NSUInteger)runCount
{

self.runCount = runCount;
self.frm = frm;
[self performSelectorInBackground:@selector(backgroundEvalFrm) withObject:nil];

// for (int i = 0; i < runCount; i++) {
// [self runFormula:frm];
// }
//

}

-(void)backgroundEvalFrm
{
percentVal = self.runCount / 100;
NSOperationQueue *queue = [[NSOperationQueue alloc] init];
[queue setMaxConcurrentOperationCount:20];



for (int i = 0; i<self.runCount; i++) {
NSInvocationOperation *op =[[NSInvocationOperation alloc] initWithTarget:self selector:@selector(runFormula:) object:self.frm];
[queue addOperation:op];

}

}

那么为什么UI被屏蔽了呢?

这是线程返回码...都在同一个类中

-(void)runFormula:(NSDictionary *)frm
{
NSMutableString *formula = [[frm objectForKey:kFormulaExpresion] mutableCopy];
NSArray *variables = [frm objectForKey:kVariableArray];
NSArray *evals = [self evaluateVariables:variables];


for (NSDictionary *var in evals) {
NSString *sym = [var objectForKey:kVariableSymbol];
[formula replaceOccurrencesOfString:sym withString:[[var objectForKey:@"numVal"] stringValue] options:NSCaseInsensitiveSearch range:NSMakeRange(0, [formula length])];
}
//parse formula
//NSLog(@"formula to parse:%@",formula);
NSNumber *resNo = [formula numberByEvaluatingString];
// NSLog(@"formula %@ the result : %f",formula,[resNo doubleValue]);
//NSNumber *resNo = [NSNumber numberWithDouble:result];
[self performSelectorOnMainThread:@selector(addNewResult:) withObject:resNo waitUntilDone:NO];
}

#pragma mark -- data aggregation delegate
-(void)addNewResult:(NSNumber *)nr
{
NSLog(@"index : %i result: %f",currentIndex,[nr doubleValue]);
[[self delegate] didReceiveResult:nr];
resultsArray[currentIndex]=[nr doubleValue];
currentIndex ++;
if ( (currentIndex % percentVal) == 0) {
[[self delegate] percentCompleted];
}
}

最佳答案

如果您的计算都在以不协调的方式(极有可能)竞争相同的资源(即 CPU 或 I/O),那么您应该显着降低最大并发操作数——尝试 2。很有可能,它们会使用更少的时间/精力完成。此外,在执行计算期间,主线程不会减少到 CPU 时间的 5% 以下(结果:响应速度更快的 UI)。

关于ios - iPad 上的后台计算会阻塞用户界面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15008493/

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