Как остановить поток от бессрочного запуска в 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;
}
}
Потому что это означает, что фоновая процедура все еще работает.
1 ответ
Попробуйте аннулировать функцию. подобно
var thread = dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
self.someClass.beginService();
где вы хотите остановиться
thread.invalidate()