オブジェクトを持つ新しいスレッドに(NSString *)を渡したいと思います。 私は、バックグラウンドスレッドで、メインスレッドでそれを変更できるように、私はこのNSString *パラメータを新しいスレッドwithobjectに渡す方法
//this method will create a thread for sleepAndAssign ,and i want to pass the param type is NSString * . the background thread is to change the param's value.
NSString *param = @"0";
[self performSelectorInBackground:@selector(sleepAndAssign:) withObject:param];
NSLog(@"param = %@", param);
[NSThread sleepForTimeInterval:4];
NSLog(@"param = %@", param);
...
- (void)sleepAndAssign:(NSString *)param {
[NSThread sleepForTimeInterval:1];
NSDate *date = [NSDate dateWithTimeIntervalSinceNow:2];
[NSThread sleepUntilDate:date];
param = @"5";
NSLog(@"backgroundthread param = %@", param);
}
のように変更 にコードを取得することができ、結果の出力は、私はのparamの変更を受け取ることができますどのように
param = 0
backgroundthread param = 5
param = 0
ですバックグラウンドスレッドで行うのですか? 私は知っているこれを行うにはの参照キーワードがあります。
私は私がこの問題を解決できるメソッドのポインタのアドレスを渡すことができますが、スレッドは、idタイプになる必要があることを渡す必要があります、私はメソッドにparamのアドレスを渡すことはできません。どうすればいいですか?
ありがとう、私はそれを得た最も簡単な解決策。私は単純な環境でこれを使っています。だから私は問題を解決するためにラッパーオブジェクトを作成したくない。 NSString、NSNumberなどの基本的な型を使用できる他のソリューションがありますか? – lamb
@lambスレッドとセレクタ(メソッド)を使用せず、キューとブロックを使用します。 – Sulthan
ok ...これはもっと良い解決策だと思います – lamb