Objective C - 单个背景线程

Ani*_*nis 1 iphone multithreading objective-c

我想为iPhone应用程序运行一个后台线程,该应用程序一直在后台运行,并在特定事件触发时执行,并等待特定事件触发以再次开始执行.在执行线程期间,如果再次触发特定事件,则线程应重新开始其工作.

我正在开发一个自定义地图应用程序.在TouchesMoved事件中,我需要根据在后台线程中移动的位置加载地图图像切片.问题是当我快速移动地图时触发了touchesMoved事件,前一个线程尚未完成其工作并且启动了新线程.它会导致线程安全问题,我的应用程序崩溃了.

因此,我正在考虑一个解决方案,让所有时间都可以使用单个线程,并在触发touchesMoved时启动其工作,如果再次触发touchesMoved,它应该重新开始工作而不是启动新线程.我认为它会阻止线程安全问题.

请帮忙

pet*_*ert 6

首先,我要回应使用NSOperationNSOperationQueue.您可以NSThread直接使用直接使用,但关键NSOperation是它隐藏了您的线程,让您专注于您需要执行的处理.NSOperation在需要时尝试触发请求,查看用例中的性能; 即使这些操作以异步方式获取数据,它也应该为您提供具有良好性能的清洁解决方案,以及未来的证据.

我已经成功地使用NSInvocationOperation来根据需要经常发出请求,这听起来像是你所追求的那种要求和行为.我会更普遍地建议您在测试项目中进行实验; 在这里你可以测试性能.

以下博客帮助我开始玩NSOperation:

http://www.dribin.org/dave/blog/archives/2009/09/13/snowy_concurrent_operations/

http://www.cimgf.com/2008/02/16/cocoa-tutorial-nsoperation-and-nsoperationqueue/

与往常一样,Apple 线程编程指南是一个关键的读物,根据需要找出可行的方法.