0

まず、私は完全なObjective-Cの初心者であり、既存のコードベースを取得しているので、NSRunLoopなどについて必死に読んでいますが、さらに助けが必要です。

基本的に、私は次のようなコードを継承しています。

[[NSRunLoop mainRunLoop] runUntilDate:[NSDate distantFuture]];
[_captureSession startRunning];
return [NSNumber numberWithInt:0];

戻ることになっている関数で、代わりにstartRunningで永久にブロックします。戻るにはこれが必要ですが、なぜブロックされているのかわかりません。それについて散らばっているいくつかのコードが役立つかもしれません:

_captureDecompressedVideoOutput = [[QTCaptureDecompressedVideoOutput alloc]
                                    init];
[_captureDecompressedVideoOutput setDelegate:self];
[_captureDecompressedVideoOutput performSelectorOnMainThread:@selector(setPixelBufferAttributes:) withObject:captureDictionary waitUntilDone:NO];

何が起こっているのか分かりますか?

4

1 に答える 1

0

[_captureSession startRunning]を別の関数に貼り付けてから、呼び出しを次のように置き換えました

self performSelectorInBackground:@selector(backgroundCapture) withObject:nil];

スレッドで実行されました。ブロッキングは、メソッドが戻るのを妨げなかっただけでなく(別のスレッド上にあったため)、呼び出しは、それ自体のスレッドで実行されていたため、ブロックさえしませんでした。奇妙な。

于 2012-08-14T23:22:50.950 に答える