実装が見えないライブラリから関数を実行しています。
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;
}
}
これは、バックグラウンド ルーチンがまだ機能していることを意味するためです。