Objective c 当不在回路中时,程序指示器确定

Objective c 当不在回路中时,程序指示器确定,objective-c,macos,cocoa,nsprogressindicator,Objective C,Macos,Cocoa,Nsprogressindicator,我是从另一个问题中使用这段代码的,我不知道如何真正“确定”某项任务可能需要多长时间。例如: - (void)doSomething { [showProgress startAnimation:nil]; dispatch_queue_t backgroundQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); dispatch_async(backgroundQueue, ^{

我是从另一个问题中使用这段代码的,我不知道如何真正“确定”某项任务可能需要多长时间。例如:

- (void)doSomething
{
    [showProgress startAnimation:nil];
    dispatch_queue_t backgroundQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
    dispatch_async(backgroundQueue, ^{
        for (NSUInteger i = 0; i < 100; i++) {

            // Do whatever it is you need to do

            [self goUnZipFiles]; // THIS COULD BE A 1MB FILE OR 3GB

            dispatch_async(dispatch_get_main_queue(), ^{
                [showProgress incrementBy:1.0];
            });
        }
        // Done with long running task
        dispatch_async(dispatch_get_main_queue(), ^{
            [showProgress stopAnimation:nil];
        });
    });
}

例如,问题是有一个任务可以解压一个可能是1 MB或3 GB的文件-我如何通过编程确定在任务持续时间内以平滑一致的方式设置指示器动画的时间?谢谢

这完全取决于任务本身及其功能。某些任务可能会为您提供一个委托回调,您可以使用它来跟踪进度。你能更具体地说明你的任务是什么以及你是如何完成的吗?作为旁注,您的示例代码在每次循环中调用goUnZipFiles方法100次。这是有意的吗?我假设任务本身应该运行一次。谢谢,100次的方法可能不是最好的例子,尽管考虑了。如果我有100个zip文件需要处理,那么时间将如何确定?