8

NSOperationQueue は、予想どおり、希望どおりに多くのスレッドを作成します。しかし、アプリを一時停止して Xcode でデバッグすると、どのスレッドが 1 つの操作キューに属し、どのスレッドが別の操作キューに属しているかが明確になりません。

私はもう試した:

[NSThread currentThread] setName: @"My amazing operation thread"]

しかし、スレッドは再利用されるため、多くのスレッドがこの名前を取得し、それを失うことはありません。-startでスレッド名を設定し、で設定を解除しようとしまし-finishたが、スレッド名が Xcode デバッグ スレッド リストに表示されません。

Xcodeでデバッグしやすくするために、スレッド/操作に名前を付ける良い方法は何ですか?

4

4 に答える 4

4

NSOperationQueue に名前を付けるには、次を使用できます。

- (void)setName:(NSString *)newName

デバッグ中、スレッドの名前がスレッドの下に薄い灰色で表示されます。

例: (スレッド 3 は私のものです)

ここに画像の説明を入力

Appleのドキュメントから:

討論

名前は、実行時にオペレーション キューを識別する方法を提供します。ツールは、この名前を使用して、コードのデバッグまたは分析中に追加のコンテキストを提供することもできます。

Xcode は、この情報を使用してデバッグ中に追加のコンテキストを提供する「ツール」の 1 つです。

于 2013-03-21T23:16:05.037 に答える
0

これを行うことで問題を修正しました:

[[NSThread currentThread] setName:@"ScreenSharingProcessorThread"];

それ以外の:

[self setName: @"ScreenSharingProcessorThread"];

お役に立てれば

于 2014-08-07T15:25:09.783 に答える
0

また、デバッグ中に NSOperationQueue に名前を付けても、Xcode でスレッドに名前が付けられないこともわかりました。

解決策:スレッドの名前を設定する操作を追加し、キューの作成後に一度キューに追加します。

NameThreadOperation.h

#import <Foundation/Foundation.h>

@interface NameThreadOperation : NSOperation

@end

NameThreadOperation.m

#import "NameThreadOperation.h"

@implementation NameThreadOperation

- (void)main
{
    @autoreleasepool
    {
        [[NSThread currentThread] setName:@"Name of the thread"];
    }
}

@end

ViewController.m などで:

operationQueue = [[NSOperationQueue alloc] init];

#if defined(DEBUG)
    [self.operationQueue addOperation:[[NameThreadOperation alloc] init]];
#endif
于 2014-11-14T14:28:17.387 に答える