ときどき、Cocoa コード セグメントでポップアップ アラート ウィンドウを作成する必要があります。以前はNSAlert
、直接使用した後、目標を達成するのがより簡単runModal
であることがわかりましたが、行かなければなりませんでした。NSRunAlertPanel
そこで、すべてのアラート機能を に切り替えることにしましたNSRunAlertPanel
。ほとんどの場合、問題ないように見えました。</p>
今、マルチスレッドを追加しています。メインスレッドでコールバックする場合NSRunAlertPanel
よりも明らかに遅いように見えることがわかりました。NSAlert
コード セグメント:
まず、スレッドを作成します。
[NSThread detachNewThreadSelector: @selector(tryRunLoop:) toTarget:self withObject:nil];
次にtryRunLoop
、このスレッドのこの関数は、メイン スレッドのアラート ウィンドウ関数を呼び出します。
while(1)
[self performSelectorOnMainThread:@selector(showAlert:) withObject:anObject waitUntilDone:YES];
メインスレッドの関数showAlert
は残りのことを行います:
NSRunAlertPanel(@"Warning:",@"Just testing", @"YES", nil, nil);
時間の経過とともに、ポップアップ ウィンドウの応答が遅くなります。NSAlert
代わりに使用するNSRunAlertPanel
か、メイン スレッドで popup メソッドを実行しなければ、症状は消えるはずです。
また、これら 2 つの方法では CPU 使用率も異なることがわかりました。常にボタンを押している間、明らかにNSAlert
CPU使用率が低くなります。
誰かがこれらの現象を説明できますか?
PS: 元のプロジェクト全体をオンラインで公開することは許可されていなかったため、Github で簡単な Cocoa プロジェクトを作成して症状とURLKnown issues
をシミュレートしました。最初に Readme ファイルを参照してください。