2009-05-29 10 views
6

Objective Cにスレッドがありますか?もしそうなら、彼らはどのように宣言され使用されていますか?Objective-Cのスレッド化

Objective Cで誰かがマルチスレッドを知っている場合は、私と共有してください。

ありがとうございます。

答えて

9

Cocoaを使って開発している場合(つまり、Macやiphoneの場合)、マルチスレッドに使用できるNSThreadクラスにアクセスできます。のGoogle検索でAPIが見つかります。

あなたが使っているようにそれを宣言することができます。

ターゲットとセレクタは、あなたが持つスレッドを開始したいオブジェクトとセレクタをされ、そして引数がセレクタに送信する引数です
NSThread *mythread = [[NSThread alloc] initWithTarget:target selector:selector object:argument]; 

[mythread start]を使用して開始します。

18

新しいスレッドでメソッドをスピンオフする簡単な方法は、使用することです。

+ (void)detachNewThreadSelector:(SEL)aSelector toTarget:(id)aTarget withObject:(id)anArgumentオンNSThread。ガベージコレクションを実行していない場合は、独自の自動解放プールを設定する必要があります。

もう1つの簡単な方法は、メインスレッドをブロックしたくない場合だけ使用することです。あなたは他のものの間で複数のスレッド間で共有することができますので、あなたもあなたの自由なロックを与えることができNSOperationを見てみる必要があるの後にある並行処理の種類に応じて、NSObject

- (void)performSelectorInBackground:(SEL)aSelector withObject:(id)arg

3

またMacResearchのドリュー・マコーマックの記事を見て、この例を参照するにはNSOperation

に見ることができます。

+0

NSOperationはiOS 4.0以降のみをサポートしています。 –

2

detachNewThreadSelectorのようなもので遠くに行く前に:Appleの公式ドキュメントをチェックしてください。オプション(操作キュー、ディスパッチキューなど)の概要については、Concurrency Programming Guideがあります。下位レベルの(そしてあまり推奨されない)スレッディングについては、Threading Programming Guideがあります。

あなたは、Appleが最初に話す内容を読まずにスレッドを回転させたいのは間違いありません。彼らはGCDのようなもので多くの作業をして、並行プログラムを書くのをより簡単で安全にしました。

5

はい客観C.におけるスレッドの概念が存在しており、マルチスレッドを実現するために、複数の方法が客観Cである

1>NSThread

[NSThread detachNewThreadSelector:@selector(startTheBackgroundJob) toTarget:self withObject:nil]; 

これはで新しいスレッドを作成します。バックグラウンド。あなたのメインスレッドから。performSelector

[self.tableView performSelectorOnMainThread:@selector(reloadData) withObject:nil waitUntilDone:YES]; 

を使用して

2>を使用すると、バックグラウンドスレッドからこれを呼び出す場合...あなたはまた、作成されます

[self performSelectorInBackground:@selector(abc:) withObject:obj]; 

を使用することができ、あなたのメインスレッド上でUIのタスクを実行しますバックグラウンドスレッド。 NSoperation GCDバックグラウンドスレッドで、それが完了しています一度

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ 
     [self callWebService]; 
     dispatch_async(dispatch_get_main_queue(), ^{ 
      [self updateUI]; 
     }); 
    }); 

ウィルcallWebServiceを使用して

Follow this link

4>を使用して

3>。メインスレッドではupdateUIになります。 More about GCD

これは、iOSで使用されているマルチスレッドのほとんどすべての方法です。お役に立てれば。

関連する問題