2011-05-25 8 views
0

主dosignupが呼ばれることは決してありませんIphoneいつ操作キュースレッドが本当に開始しますか?


NSInvocationOperation *operation = [NSInvocationOperation alloc]; 
operation = [operation initWithTarget:self 
          selector:@selector(dosignup:) 
           object:params]; 

while (![operation isFinished]) [NSThread sleepForTimeInterval:0.1]; 

[operation release]; 

をテストするために、このようなコードをしようとしています。したがって、セレクタはメインスレッドが処理するまでセレクタが呼び出されないことを前提にしなければなりません。キューの挿入時にはフォークやスレッドのように.NET上には挿入されません。


答えて

2

操作をNSOperationQueueに追加するか、手動で起動する必要があります。

NSOperationQueue *queue = [[NSOperationQueue alloc] init]; 

NSInvocationOperation *operation = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(dosignup:) object:params]; 
[queue addOperation:operation]; 
[operation release]; 

[queue release]; 

または

NSInvocationOperation *operation = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(dosignup:) object:params]; 
[operation start]; 

しかし、あなたのコードが今だけほとんど意味がないので、私は、あなたが本当に何をしたいのか分かりません。

+0

はい、もちろんありがとう....キューに追加する必要があります!!!!!! Doh – ort11

+1

また、上の例のキューリリースを見て、キューを解放していないことを確認してください。 – ort11

0

実行するには[operation start]に電話する必要があります。 NSInvocationOperationは非同期であるため、同期して実行され、スレッドを生成することはありません。これは、現在の実装が次のコードとほぼ同じであることを意味します。

[self dosignup:params]; 
関連する問題