8

メソッドが実行されている/呼び出されているスレッドまたはキューをログに記録する方法はありますか? 何かのようなもの:

- (void)foo
{
    NSLog(@"Running on %@ queue, %@ thread", queue, thread);
}
4

4 に答える 4

11

で現在のスレッドを取得できます+[NSThread currentThread]。それはプロパティを持つことができnameますが、設定していない場合はそれに依存しないでください。

「キュー」にはさまざまな意味があるため、キューはよりトリッキーです。キューは である可能性がありNSOperationQueue、そのnamefromを取得できます+[NSOperationQueue currentQueue](ここでも、設定したと仮定します)。

次に、ディスパッチ キューがあります。で現在のキューを取得できますがdispatch_get_current_queue()、この関数はキューに関連付けられていないコードから呼び出された場合でも成功することに注意してください(!)。その場合、デフォルトのバックグラウンド キューが返されます。キューにはラベルが付けられているため、呼び出すことができますdispatch_queue_get_label()。ラベル付きのキューを作成した場合は、それを取得できます。

したがって、基本的には、はい、キューまたはスレッドを取得できますが、ディスパッチされたコードでなくても、すべてのコードに関連付けられたディスパッチ キューがあるという条件付きです。通常、これらのスレッドとキューに意味のある名前を付けることもできます。これはデバッグに便利ですが、名前を付けるのはあなたの責任です。

于 2013-05-20T10:55:26.933 に答える
1

スレッドを取得するには、次を使用できます

NSLog(@"Running on %@ thread", [NSThread currentThread]);
于 2013-05-20T10:53:57.000 に答える
1

次のように現在のディスパッチ キューを取得できます。

dispatch_queue_t dispatch_get_current_queue(void);

ただし、ヘッダーには次の警告があります。

デバッグとロギングの目的でのみ推奨されます。

返されるキューがグローバル キューの 1 つであるか、コード自体が作成したキューでない限り、コードは、返されたキューについていかなる仮定も行ってはなりません。キューが dispatch_get_current_queue() によって返されたものでない場合、コードはキューへの同期実行がデッドロックから安全であると仮定してはなりません。

だからYMMV。

于 2013-05-20T10:56:33.550 に答える