1

このコードは、動作中に 2 つのタスクを FIFO 順で実行します。

-(void) update {

    @autoreleasepool {

        dispatch_queue_t queue = dispatch_queue_create("us.yellosoft", 0);

        // inpternal address
        dispatch_async(queue,^(){

            // TODO: implement NSProgressIndicator logic

            [internalIpMenuItem setTitle: @"Updating..."];

            // get IP address from [[NSHost currentHost] addresses]...
            NSString *localIP = [self getLocalIP];

            // change UI
            [internalIpMenuItem setTitle: localIP];

        });

        // external address
        dispatch_async(queue, ^(){

            // TODO: implement NSProgressIndicator logic

            [externalIpMenuItem setTitle: @"Updating..."];

            // get IP address from external JSON service...
            NSString *externalIP = [AddressService getIPaddress];

            // change UI
            [externalIpMenuItem setTitle: localIP];

        });

    }

}

2 つのタスクを同時に実行したいと考えています。これは可能ですか?

4

2 に答える 2

1

ドキュメントから:

iOS 5 以降では、キューの種類として DISPATCH_QUEUE_CONCURRENT を指定することで、同時ディスパッチ キューを自分で作成できます。さらに、アプリケーションが使用する定義済みグローバル同時キューが 4 つあります。グローバル同時キューを取得する方法の詳細については、「<a href="https://developer.apple.com/library/ios/documentation/General/Conceptual/ConcurrencyProgrammingGuide/OperationQueues/OperationQueues.html#//apple_ref」を参照してください。 /doc/uid/TP40008091-CH102-SW5" rel="nofollow">グローバル同時ディスパッチ キューの取得。"</p>

于 2014-04-11T13:17:57.660 に答える
1

「できます」が、とにかく UIKit メソッドを使用する場合は、メイン スレッドにディスパッチする必要があります。

作業を並列化するには、グローバル同時キューを使用する必要があります。独自の同時ディスパッチ キューを使用することは、共有リソースへのアクセスを同期したい場合にのみ意味があります。その場合はdispatch_barrier_async、 とdispatch_barrier_sync.

于 2014-04-11T13:19:01.923 に答える