目前我正在使用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 ++++++++++ 会再次创建子类