Iphone 取消Objective-C中的后台线程

Iphone 取消Objective-C中的后台线程,iphone,objective-c,ipad,Iphone,Objective C,Ipad,如何取消Objective-C中的背景线程 我这样称呼后台线程: [self performSelectorInBackground:@selector(setupThumbnails) withObject:nil]; 它在刷卡时调用,每次刷卡我都想取消以前的后台线程请求。维护线程的取消属性,并在线程中定期检查它。您需要使用锁或原子函数(由操作系统及其框架提供,不是自己实现的!)来指示应该取消线程。系统提供的原子功能记录在atomic手册页中 更好的做法是在NSOperationQueue上

如何取消Objective-C中的背景线程

我这样称呼后台线程:

[self performSelectorInBackground:@selector(setupThumbnails) withObject:nil];

它在刷卡时调用,每次刷卡我都想取消以前的后台线程请求。

维护线程的取消属性,并在线程中定期检查它。您需要使用锁或原子函数(由操作系统及其框架提供,不是自己实现的!)来指示应该取消线程。系统提供的原子功能记录在
atomic
手册页中

更好的做法是在NSOperationQueue上使用NSOperation而不是NSThread。它仍将使用线程在后台执行工作,但它允许框架和操作系统代表您管理线程池,并且NSOperation本身具有可检查的
isCancelled
属性,以及取消单个NSOperation或整个NSOperationQueue中的所有操作的能力

例如,您可以有一个“设置一个缩略图”操作,然后只需为每个要设置的缩略图向队列添加一个这样的操作。操作系统和框架将合作管理用于执行这些操作的线程数量,不过您也可以设置队列的宽度,以确保最多只能同时运行多个导入。如果用户取消,您可以要求队列取消所有未完成的操作