Iphone 是否可以在后台线程中使用计时器杀死rogue方法?

Iphone 是否可以在后台线程中使用计时器杀死rogue方法?,iphone,objective-c,regex,multithreading,nsthread,Iphone,Objective C,Regex,Multithreading,Nsthread,我有一段代码调用一个方法(即processRegex),该方法来自第三方库regexKitLite,它对一组数据运行regex匹配。我正在bg线程中使用performSelectorInBackground:运行此方法。我发现,在某些情况下,如果数据无效或损坏,那么processRegex方法会锁定线程,并陷入递归循环中,这可能需要很长时间才能恢复,这是我希望避免的 我在考虑使用一个计时器,它基本上会等待x个时间量,如果在指定的时间过去之前它没有失效,那么它就会杀死运行该方法的bg线程 但我的问

我有一段代码调用一个方法(即processRegex),该方法来自第三方库regexKitLite,它对一组数据运行regex匹配。我正在bg线程中使用performSelectorInBackground:运行此方法。我发现,在某些情况下,如果数据无效或损坏,那么processRegex方法会锁定线程,并陷入递归循环中,这可能需要很长时间才能恢复,这是我希望避免的

我在考虑使用一个计时器,它基本上会等待x个时间量,如果在指定的时间过去之前它没有失效,那么它就会杀死运行该方法的bg线程

但我的问题是:

我不能在与regex方法相同的线程中启动计时器,因为该线程在尝试处理数据时可能会锁定,并且不会像下面尝试的那样调用我的计时器

// setup timer to restrict the amount of time a regex can take before killing it
myTimer = [NSTimer scheduledTimerWithTimeInterval:10.0 target:self selector:@selector(resultProcessingTimedOut:) userInfo:nil repeats:NO];

resultsArray = [NSMutableArray arrayWithArray:[html arrayOfCaptureComponentsMatchedByRegex:]; // <-- could lock up thread!!

[myTimer invalidate];
//设置计时器以限制在终止正则表达式之前可以花费的时间量
myTimer=[NSTimer scheduledTimerWithTimeInterval:10.0目标:自选择器:@selector(resultProcessingTimedOut:)用户信息:无重复:否];

resultsArray=[NSMutableArray arrayWithArray:[html arrayOfCaptureComponentsMatchedByRegex:];//简而言之,不可以任意终止另一个线程。无法知道终止时它将处于何种状态,因此,内存泄漏和/或损坏必然会发生

您可以通过以下几种方法之一解决此问题(包括组合):

  • 修改regexkit,使其具有某种“停止”标志,可以在另一个线程中触发计时器后设置。定期检查它,并在需要时进行清理/停止

  • 验证或限制输入正则表达式和输入数据,以确保不会出现慢/长情况

  • 分解输入数据,以便可以对其进行批处理