Я создал подпоток с помощью NSThread в основном потоке
NSThread *newThread = [[NSThread alloc] initWithTarget:self selector:@selector(MyThread:) object:timer];
5 секунд спустя я использовал [newThread отмену] в основном потоке для остановки подпотока, но это не работало,
Метод MyThread: в newThread, все еще работающем
таким образом, что является корректным ответом для остановки newThread, СПАСИБО
на самом деле [newThread isCancelled] ДА, но селекторным MyThread был все еще Уокинг
Метод cancel
только сообщает потоку, что он отменен (как вы упомянули, изменяет isCancelled
на YES
. Затем сам поток обязан проверить это и выйти. Например, в методе MyThread:
вы можете сделать следующее:
// At some checkpoint
if([[NSThread currentThread] isCancelled]) {
/* do some clean up here */
[NSThread exit];
}
Вы должны периодически выполнять эту проверку и выходить из потока, как показано на рисунке; иначе cancel
не будет иметь никакого эффекта.