我有一个类方法,可以通过冗长的操作(10-15秒加载时间)进行处理。
+(NSString*)shrinkKML
{
//lengthy operation
}
当从app代理抛出applicationDidEnterBackground时,发送通知以中断它的最佳方法是什么?我通常会对我的自定义类实现一个NSNotificationCenter调用来设置一个标志,然后我的“冗长操作”可以定期检查标志。这里抓住的是类方法(如果我错了,请纠正我)不能依赖于实例变量。还有另一种方式吗?
答案 0 :(得分:0)
我建议使用[UIApplication sharedApplication].applicationState
定期检查状态。
答案 1 :(得分:0)
这里抓住的是类方法(如果我错了,请纠正我)不能依赖实例变量。
您可以将旗帜设为全局变量。
类.m文件:
BOOL isCancelled;
@implementation SomeClass
+ (void)shrinkKML {
isCancelled = NO;
// Do stuff and check isCancelled
}
@end
App Delegate .m文件:
extern BOOL isCancelled;
@implementation AppDelegate
- (void)applicationDidEnterBackground:(UIApplication *)application {
isCancelled = YES;
}
@end
但是,如果我可以提出建议,创建和管理长时间运行的异步任务的好方法是使用NSOperation和NSOperationQueue。它们具有内置的取消功能。您将创建一个启动此任务的NSOperationQueue对象,然后将shrinkKML作为NSOperation添加到队列中。要将shrinkKML函数转换为NSOperation,您可以继承NSOperation。实施可能需要一些工作,但它比重新发明轮子要好。