向类方法发送通知

时间:2011-11-24 21:39:17

标签: iphone objective-c

我有一个类方法,可以通过冗长的操作(10-15秒加载时间)进行处理。

+(NSString*)shrinkKML
{
   //lengthy operation
}

当从app代理抛出applicationDidEnterBackground时,发送通知以中断它的最佳方法是什么?我通常会对我的自定义类实现一个NSNotificationCenter调用来设置一个标志,然后我的“冗长操作”可以定期检查标志。这里抓住的是类方法(如果我错了,请纠正我)不能依赖于实例变量。还有另一种方式吗?

2 个答案:

答案 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。实施可能需要一些工作,但它比重新发明轮子要好。

http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/NSOperation_class/Reference/Reference.html