at_yasu's blog

ロード的なことを

LeopardとNSThread

某SNSにも書いた事です。

Leopard上でNSThreadの+ detachNewThreadSelector:toTarget:withObject:メソッドは、使用しては行けない事になっている模様です。

08/04/23:追記:沼田さん、突っ込みありがとうです。detachNewThreadSelector, initWithTarget:... 双方とも使えます。ただ使う時は、少し注意してねん、と言う事です。

で、何であたし書き直しを忘れてるんだろ・・・orz


10.4まででは、[NSThread detachNewThreadSelector:@(メソッド名) toTarget:self withObject:self] で(気軽|厄介)にThreadが作れましたが、10.5からは使用禁止になっています。

追記:御免、微妙に嘘付いた。使用禁止でも、stack sizeを扱う場合は使用してはいけないみたい。でもこのstackって何に使うんだろ・・・


おそらくですが、10.5の場合は下記のようにするべきのようです。

#if MAC_OS_X_VERSION_10_5 <= MAC_OS_X_VERSION_MAX_ALLOWED
NSThread *th = [[NSThread alloc] initWithTarget:self
selector:@selector(メソッド名:)
object:self];
[th start];
[th release];

// もしくは...
[self performSelectorInBackground:@selector(メソッド名:) withObject:nil];
#else
[NSThread detachNewThreadSelector:@selector(runToThread:)
toTarget:[self class]
withObject:self];
#endif

参考:http://developer.apple.com/documentation/Cocoa/Conceptual/Multithreading/CreatingThreads/chapter_4_section_5.html#//apple_ref/doc/uid/10000057i-CH15-SW8


取り急ぎ以上。(Threadのスタックの所為で、こんな事になったっぽい。まだ斜め読み)