5

xcodeでスレッドを作成し、そのスレッドから呼び出される関数名を指定しました。しかし、私の問題は、呼び出しに与えられた関数名が呼び出されていないことです(その関数にブレークポイントを置くとわかりました)

コード:

 NSThread* myThread; 
 [myThread start]; 
 [self performSelector:@selector(func1:) onThread:myThread withObject:nil waitUntilDone:false]

そして後で私はこれも試しました:

NSThread* myThread = [[NSThread alloc] initWithTarget:self selector:@selector(func1:)object:nil];
[myThread start]; 

上記のfunc1は、呼び出される関数の名前です。

スレッドを作成してそこからfunc1を呼び出す方法を教えてください。

4

3 に答える 3

16

最初のコード サンプルでは、​​実際に新しいスレッドを作成しているようには見えません。空のmyThread変数を作成してから呼び出しますstartが、これはstartに送信されるだけnilです。次に、空のスレッド変数がperformSelector:onThread:withObject:waitUntilDone:メソッドに送信され、おそらく何もしません。

を使用して実際に何かを実行する前に、適切にスレッドを作成する必要がありますperformSelector:onThread:withObject:waitUntilDone:

または、メソッドが実行されるバックグラウンド スレッドを気にしないと仮定すると、単純に を使用する方がはるかに簡単ですperformSelectorInBackground:withObject:。例えば:

[self performSelectorInBackground:@selector(func1:) withObject:nil];
于 2012-05-03T08:01:53.003 に答える
0

func1が1つの引数を受け入れる場合。次に、間違いなく、使用した2番目のアプローチで動作する必要があります。fuc1に正式な引数がなくても、この@selector(fuc1 ::)のようなセレクターを呼び出してオブジェクトをnilとして渡す可能性があります。このため、機能していない可能性があります。それが1つの理由である可能性があります。そうでない場合は試してみてください。

于 2013-03-15T05:51:24.933 に答える