我有一个简单的应用程序,允许人们将图片上传到服务器。出于某种原因,当它上传每个文件时,应用程序会冻结,并且不允许您对其执行任何其他操作。
无论如何在后台运行它?
感谢。
答案 0 :(得分:1)
在iOS或Mac OS上,您可以使用NSThread,NSOperation或libDispatch(在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
}
这是否是正确的做事的方式,我不知道。你需要做进一步的研究(再次,参考我上面提到的另一个问题)。此外,我不确定该代码是否完全正确,因为我只是在文本编辑器中编写它而不通过编译器运行它。