NSThread で別スレッドを起動する : Objective-C プログラミング

PROGRAM


NSThread で別スレッドを起動する

Objective-C で別スレッドを起動するには、"performSelectorInBackground:withObject:" メソッドや "NSOperation" クラスを使った方法もありますが、ここでは "NSThread" クラスを使った方法について、記してみたいと思います。

 

NSThread では、指定したメソッドを別スレッドで実行することができます。

例えば、次のようにして、別スレッドでの処理を行うメソッドを定義しておきます。

- (void)_threadLoop:(id)userInfo;

このようなメソッドを作成したら、これを別スレッドで動作させたいところで、Mac OS X v10.5 以降または iOS 2.0 以降では、次のようにして NSThread を実行します。

NSThread* thread;

 

# スレッドを生成します。

thread = [[[NSThread alloc] initWithTarget:self selector:@selector(_threadLoop:) object:nil] autorelease];

 

# 別スレッドで _threadLoop: メソッドを実行します。

[thread start];

それ以前のバージョンでは "detachNewThreadSelector:toTarget:withObject:" メソッドを使って、次のように実行します。

NSThread* thread;

 

# スレッドを生成して、実行します。

thread = [NSThread detachNewThreadSelector:@selector(_threadLoop:) toTarget:self withObject:nil];

 

これらのようにすることで、セレクタとして指定した "_threadLoop:" メソッドが、別スレッドで実行されます。

ここで作成した NSThread のインスタンスは、別スレッドで実行したメソッドが終了するまではちゃんと retain されているようでしたので、start メソッド実行直後に release しても大丈夫でした。

 

なお、別スレッドで実行するメソッドについての留意点は マルチスレッド実装時の留意点 の方に記しておきましたので、必要に応じてそちらも参考にしてみてください。

また iOS のバージョンによってはオートリリースプールについても気を遣う必要があります。そちらについては オートリリースプールの使い方と基本 の方に記しています。

[ もどる ]