菜鸟教程小白 发表于 2022-12-12 08:54:41

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


                                            <p><p>我正在尝试使用后台线程在 iPad 上进行一些计算。
问题是即使您正在运行计算。运行时 UI 被阻止...
我做错了什么。</p>

<pre><code>;
</code></pre>

<p>这是从 IBAction 调用的。</p>

<p>这是被调用的代码:</p>

<pre><code>-(void)evaluateFormula:(NSDictionary *)frm runNo:(NSUInteger)runCount
{

    self.runCount = runCount;
    self.frm = frm;
    ;

//    for (int i = 0; i &lt; runCount; i++) {
//      ;
//    }
//   

}

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



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

    }

}
</code></pre>

<p>那么,为什么 UI 会被阻止? </p>

<p>这里是线程返回码……都在同一个类中</p>

<pre><code>-(void)runFormula:(NSDictionary *)frm
{
    NSMutableString *formula = [ mutableCopy];
    NSArray *variables = ;
    NSArray *evals = ;


       for (NSDictionary *var in evals) {
         NSString *sym = ;
          stringValue] options:NSCaseInsensitiveSearch range:NSMakeRange(0, )];
    }
    //parse formula
    //NSLog(@&#34;formula to parse:%@&#34;,formula);
    NSNumber *resNo = ;
    // NSLog(@&#34;formula %@ the result : %f&#34;,formula,);
    //NSNumber *resNo = ;
    ;
}

#pragma mark -- data aggregation delegate
-(void)addNewResult:(NSNumber *)nr
{
   NSLog(@&#34;index : %i result: %f&#34;,currentIndex,);
    [ didReceiveResult:nr];
    resultsArray=;
    currentIndex ++;
    if ((currentIndex % percentVal) == 0) {
      [ percentCompleted];
    }
}
</code></pre></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>如果您的计算都以不协调的方式(很可能)竞争相同的资源(即 CPU 或 I/O),那么您应该显着降低最大并发操作数 - 尝试 2。很有可能,它们会使用更少的时间/精力完成。此外,在执行计算期间,主线程不会减少到 CPU 时间的 5% 以下(结果:UI 响应更快)。</p></p>
                                   
                                                <p style="font-size: 20px;">关于ios - iPad 上的后台计算会阻止用户界面,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/15008493/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/15008493/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - iPad 上的后台计算会阻止用户界面