2016-10-21 3 views
0

구현에서 볼 수없는 라이브러리에서 함수를 실행했습니다.Swift에서 스레드가 무기한 실행되는 것을 어떻게 중지합니까?

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

이 라이브러리 클래스는 내 클래스 '대리자 기능을 호출합니다. 나는 self.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 초 간격으로 인쇄됩니다.

문제는, 어떻게이 스레드를 종료 할 수 있습니까? 나는 리조트에 가고 싶지 않습니다 :

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

무효화 기능을 사용해보십시오. 당신이

thread.invalidate() 
을 중지 할 할
var thread = dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ 
      self.someClass.beginService(); 

처럼
관련 문제