У меня есть фрагмент кода, который вызывает метод (то есть processRegex) из сторонней библиотеки regexKitLite, которая выполняет сопоставление регулярных выражений для группы данных. Я запускаю этот метод в потоке bg, используя executeSelectorInBackground :. Я обнаружил, что в некоторых случаях, если данные недействительны или повреждены, метод 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];
Во-вторых, согласно Apple Docs, вы должны сделать недействительным таймер в том же потоке, который его запустил, и я не могу запустить таймер в его собственном фоновом потоке, потому что я не уверен, как бы я затем его аннулировал?
И, наконец, как бы мне даже уничтожить поток, в котором выполняется регулярное выражение, поскольку вы не должны прерывать потоки.
Любые идеи о том, как справиться с этой ситуацией ???
ТНХ