2016-10-21 29 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() 
在哪里