我正在访问iphone上的照片库,并且需要很长时间才能导入我在应用程序中选择的图片,我如何在辅助线程,或者我用什么解决方案来阻止用户界面?我如何在不阻止iPhone应用程序中的用户界面的情况下运行一个进程
3
A
回答
6
我没有使用performSelectOnBackground或GCD这里的示例代码的完整解释:
GCD, Threads, Program Flow and UI Updating
下面是该职位(减去他的具体问题的示例代码部分:
performSelectorInBackground示例:
在这段代码中,我有一个调用长时间运行的工作的按钮,一个状态标签,我添加了一个滑块来显示我可以在bg工作完成时移动滑块。
// on click of button
- (IBAction)doWork:(id)sender
{
[[self feedbackLabel] setText:@"Working ..."];
[[self doWorkButton] setEnabled:NO];
[self performSelectorInBackground:@selector(performLongRunningWork:) withObject:nil];
}
- (void)performLongRunningWork:(id)obj
{
// simulate 5 seconds of work
// I added a slider to the form - I can slide it back and forth during the 5 sec.
sleep(5);
[self performSelectorOnMainThread:@selector(workDone:) withObject:nil waitUntilDone:YES];
}
- (void)workDone:(id)obj
{
[[self feedbackLabel] setText:@"Done ..."];
[[self doWorkButton] setEnabled:YES];
}
GCD样品:
// on click of button
- (IBAction)doWork:(id)sender
{
[[self feedbackLabel] setText:@"Working ..."];
[[self doWorkButton] setEnabled:NO];
// async queue for bg work
// main queue for updating ui on main thread
dispatch_queue_t queue = dispatch_queue_create("com.sample", 0);
dispatch_queue_t main = dispatch_get_main_queue();
// do the long running work in bg async queue
// within that, call to update UI on main thread.
dispatch_async(queue,
^{
[self performLongRunningWork];
dispatch_async(main, ^{ [self workDone]; });
});
}
- (void)performLongRunningWork
{
// simulate 5 seconds of work
// I added a slider to the form - I can slide it back and forth during the 5 sec.
sleep(5);
}
- (void)workDone
{
[[self feedbackLabel] setText:@"Done ..."];
[[self doWorkButton] setEnabled:YES];
}
1
使用异步连接。它不会阻止用户界面,但它可以在后台进行抓取。
THIS帮助我很多时,我不得不下载图像,其中很多。
1
相关问题
- 1. 如何在不阻塞shell的情况下在cygwin中运行应用程序
- 2. 如何在不阻止用户界面的情况下使用WebClient?
- 3. 如何阻止ICS用户下载我的应用程序
- 4. 如何阻止我的应用程序在Virtualbox上运行?
- 5. 如何在我的应用程序中阻止用户(swift + parse)
- 6. 如何在不使用iPhone SDK的情况下构建iPhone应用程序?
- 7. iPhone应用程序在不使用iTunes的情况下部署
- 8. 如何在不阻止的情况下顺序启动多个程序?
- 9. 如何阻止我的应用程序进行连续处理
- 10. 如何在不停止服务器的情况下使用我们的django应用程序进行加密?
- 11. 我的GAE应用程序如何在没有app.yaml的情况下运行?
- 12. 如何在没有QTCreator的情况下运行我的应用程序?
- 13. 如何在不使用VS2010的情况下运行ASP.NET Web应用程序?
- 14. C#在不阻塞进程的情况下停止线程语法执行
- 15. 如何在不启动完整应用程序的情况下在C#MVC应用程序中运行代码
- 16. 在不阻挡用户界面的情况下运行一个任务两秒钟
- 17. 在不阻止网络应用程序的情况下监听com端口
- 18. 在不阻挡用户界面的情况下在循环中添加延迟
- 19. 在任何情况下,我可以阻止iPhone使用3G吗?
- 20. 如何阻止用户界面长期运行的JavaScript循环
- 21. 如何在不上传iPhone应用程序的情况下演示iPhone应用程序
- 22. 如何在不安装Windows的情况下运行.Net应用程序?
- 23. 在未安装VB6的情况下运行VB6应用程序
- 24. 阻止用户在Windows上运行应用程序CE
- 25. 如何从iPhone中的其他应用程序运行一个应用程序?
- 26. 如何在不阻止用户界面的情况下使用闪存定时器异步轮询文件?
- 27. 如果我的asp.net应用程序产生一个进程,该进程是否在asp.net应用程序运行的同一个应用程序域内运行?
- 28. 如何避免xcode运行应用程序中的情况?
- 29. 如何在trustedinstaller帐户下运行我的“C#”应用程序?
- 30. 应用程序如何运行一次,不会在没有变化的情况下运行另一次
sleep()仍然锁定主线程但是GDC没有:) –