在后台运行无效操作?

时间:2011-02-21 23:17:29

标签: iphone cocoa-touch void

我有一个简单的应用程序,允许人们将图片上传到服务器。出于某种原因,当它上传每个文件时,应用程序会冻结,并且不允许您对其执行任何其他操作。

无论如何在后台运行它?

感谢。

1 个答案:

答案 0 :(得分:1)

在iOS或Mac OS上,您可以使用NSThreadNSOperationlibDispatch(在iOS 4或Mac OS 10.6上)在单独的线程中处理该问题。还有pthreads,但我不确定这是否可以在iOS上使用。有关详细信息,您可能需要查看此other question(针对iOS应用,但我认为可以同样适用于Mac OS)。

编辑(对评论的回应):最简单的方式(或者我想我的首选方式,也许它不是那么简单,甚至是个好主意)可能是使用libDispatch和类似的东西:

- (IBAction) beginUpload {
    // grab a global concurrent queue
    dispatch_queue_t globalQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, NULL);
    // throw a block in it
    dispatch_async(^{
            [self uploadImages];
        }, globalQueue);
}

- (void) uploadImages {
    // where I suppose images is an array of images or something
    @synchronized(images) {
        // upload stuff here, or copy images and then
    }
    // upload stuff here
}

这是否是正确的做事的方式,我不知道。你需要做进一步的研究(再次,参考我上面提到的另一个问题)。此外,我不确定该代码是否完全正确,因为我只是在文本编辑器中编写它而不通过编译器运行它。