NSThread реализует метод -(void)cancel
, который устанавливает информацию о состоянии в принимающем потоке, чтобы указать, что он должен завершиться. Получающий фоновый поток должен - при правильном поведении - регулярно проверять, отменен ли он, используя -(BOOL)isCancelled
.
Таким образом, у получателя есть возможность правильно очистить полученные ресурсы.
Если посмотреть на семантическую нить языка Java, этот аппарат работает точно так же. Javas Thread реализует два метода void Thread.interrupt()
и boolean Thread.isInterrupted()
.
В случае, если длительные фоновые операции не реагируют на попытку -cancel
их, я бы посчитал это серьезной проблемой и подал бы отчет об ошибке / запрос на изменение.
Вы можете дождаться завершения фонового потока, регулярно вызывая либо -(BOOL)isFinished
, либо -(BOOL)isExecuting
на фоне NSThread
. К сожалению, NSDidBecomeSingleThreadedNotification
не поддерживается на платформе iPhone.