Как остановить поток от бессрочного запуска в 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()
Другие вопросы по тегам