2016-04-21 7 views

ответ

0
  1. Если вы используете GCD, отправленные задачи не могут быть остановлены в любом случае.
  2. Но если вы попытаетесь использовать NSOperationQueue, задачи, которые в настоящее время не выполняются, могут быть остановлены.
  3. Если вы используете NSThread или pthread, я думаю, что их сложно остановить без дополнительных усилий.
+0

Я отсоединился только с помощью NSThread. – Jeyanthu

+0

Тогда я думаю, вы должны добавить логику, как while (true) {if (shouldEnd) {return;}} в функции потока. И переменная shouldEnd должна быть прочитана как нечто вроде мьютекса для защиты между несколькими потоками – user3349433

1

Ваш фоновый поток должен проверить, чтобы увидеть, если он был отменен, либо с помощью метода isCancelled ...

if ([[NSThread currentThread] isCancelled]) { 
    // do cleanup here 
    [NSThread exit]; 
} 

Вы не можете убить нить внешне, потому что нет никакого способа узнать, в каком состоянии может возникнуть поток, и, таким образом, убивая его, вы получите неопределенное поведение.