2016-10-21 2 views
0

Я запускаю функцию из библиотеки, которую я не вижу в реализации.Как остановить поток от неограниченного запуска в Swift?

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ 
    someClass.beginService(); 
}); 

Этот класс библиотеки вызывает функцию делегата класса.

class Mine: UIViewController, SomeClassDelegate { 

    let someClass = SomeClass(); 

    override func viewDidLoad() { 
     super.viewDidLoad(); 
     someClass.delegate = self; 
     dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ 
      self.someClass.beginService(); 
     }); 
    } 

    func delegateCall() { 
     print ("delegateCall is called!"); 
     // do some stuff 
    } 
} 

Слово delegateCall is called! затем печатается периодически 1 раз в секунду в окне журнала, потому что я называю self.someClass.beginService();.

Проблема в том, как я могу завершить эту тему? Я не хочу прибегать к:

class Mine: UIViewController, SomeClassDelegate { 

    let someClass = SomeClass(); 
    var okToRun = false; 

    override func viewDidLoad() { 
     super.viewDidLoad(); 
     someClass.delegate = self; 
     dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ 
      self.someClass.beginService(); 
      okToRun = true; 
     }); 
    } 

    func delegateCall() { 
     if okToRun { 
      print ("delegateCall is called!"); 
      // do some stuff 
     } 
    } 

    @IBAction func buttonStopTapped (sender: AnyObject) { 
     okToRun = false; 
    } 
} 

Потому что это означает, что фоновый режим все еще работает.

ответ

0

Попробуйте выполнить недействительность funtion. Как

var thread = dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ 
      self.someClass.beginService(); 

где вы хотите, чтобы остановить

thread.invalidate()