目前我正在使用NSThread
在另一个线程中缓存图像。
[NSThread detachNewThreadSelector:@selector(cacheImage:) toTarget:self withObject:image];
交替:
[self performSelectorInBackground:@selector(cacheImage:) withObject:image];
或者,我可以使用NSOperationQueue
NSInvocationOperation *invOperation = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(cacheImage:) object:image];
NSOperationQueue *opQueue = [[NSOperationQueue alloc] init];
[opQueue addOperation:invOperation];
有什么理由放弃NSThread
吗?GCD 是为 iPhone 发布的第四个选项,但除非有显着的性能提升,否则我宁愿坚持在大多数平台上都可以使用的方法。
根据@Jon-Eric 的建议,我采用了NSOperationQueue
/NSOperation
子类解决方案。它工作得很好。该类NSOperation
足够灵活,您可以根据需要将其与调用、块或自定义子类一起使用。无论您如何创建您的NSOperation
,您都可以在准备好运行它时将其放入操作队列中。这些操作既可以作为放入队列的对象,也可以作为独立的异步方法运行,如果需要的话。由于您可以轻松地同步运行自定义操作方法,因此测试非常容易。
自从我提出这个问题以来,我已经在几个项目中使用了同样的技术,我对它保持我的代码和测试干净、有条理和愉快的异步方式感到非常满意。
A++++++++++++ 将再次子类化