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 のバージョンによってはオートリリースプールについても気を遣う必要があります。そちらについては オートリリースプールの使い方と基本 の方に記しています。
[ もどる ]