1

実装が見えないライブラリから関数を実行しています。

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!_ 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;
    }
}

これは、バックグラウンド ルーチンがまだ機能していることを意味するためです。

4

1 に答える 1