块没有真正执行?

Block not really executing?

我正在尝试使用 NSThread 的子类来 运行 一些命令。在你推荐 NSOperation 或 GCD 之前,YES 我需要使用线程。

下面是我的代码和输出。该块正在创建并添加到数组中,并且应该被线程出列和 运行,但我没有看到块的 运行ning 产生的任何输出。为什么不呢?

import UIKit

class ViewController: UIViewController {

    private let _queue = dispatch_queue_create("com.AaronLBratcher.ALBQueue", nil)
    private let _thread = TestThread()
    private let _lock = NSCondition()

    override func viewDidLoad() {
        super.viewDidLoad()

        _thread.start()

        var openSuccessful = false

        dispatch_sync(_queue) {[unowned self] () -> Void in
            self._lock.lock()
            self._thread.openFile("file path here", completion: { (successful) -> Void in
                print("completion block running...")
                openSuccessful = successful
                self._lock.signal()
                self._lock.unlock()
            })
            self._lock.wait()
        }

        print("open operation complete")
        print(openSuccessful)
    }


    final class TestThread:NSThread {
        var _iterations = 0
        var _lock = NSCondition()
        var _blocks = [Any]()

        func openFile(FilePath:String, completion:(successful:Bool) -> Void) {
            print("queueing openFile...")

            let block = {[unowned self] in
                self._iterations = self._iterations + 1
                print("opening file...")
                completion(successful: true)
            }

            addBlock(block)
        }

        func addBlock(block:Any) {
            _lock.lock()
            _blocks.append(block)
            _lock.signal()
            _lock.unlock()
        }

        override func main() {
            _lock.lock()
            while true {
                while _blocks.count == 0 {
                    print("waiting...")
                    _lock.wait()
                }

                print("extracting block...")
                if let block = _blocks.first {
                    _blocks.removeFirst()
                    _lock.unlock()
                    print("running block...")
                    block;
                }

                _lock.lock()
            }
        }
    }
}

输出:

queueing openFile...
waiting...
extracting block...
running block...
waiting...

该区块不是 运行,因为您只有 block。您需要block(),例如:

if let block = _blocks.first as? ()->() {
    _blocks.removeFirst()
    _lock.unlock()
    print("running block...")
    block()
}