2016-10-21 32 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

嘗試無效功能。 像

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

要停止

thread.invalidate() 
在哪裏