2004年08月07日
performSelectorOnMainThread:...
NSObjectにperformSelectorOnMainThread:withObject:waitUntilDone:なるメソッドが追加されています。
これを用いれぱThreadからAppKitの操作が容易出来て便利です。performSelectorを探してて見つけました。
NSThreadからAppKitを操作する場合はNSPortを利用してDO扱いでメッセージを送信する必要がありますが、このメソッドがそれらの面倒な処理をしてくれる様です。
waitUntilDoneで同期するかどうかも指定出来便利そうです。
AppKitにアクセスする部分をprotocolで定義しておいて、それをdelegateに処理させるのが良さそうです。
こんな雰囲気という事で(動作未確認)
waitUntilDoneで同期するかどうかも指定出来便利そうです。
AppKitにアクセスする部分をprotocolで定義しておいて、それをdelegateに処理させるのが良さそうです。
@protocol UpdataCounter
- (void)updateCounterField:(NSNumber *)count;
@end
@interface ThreadObject : NSObject
{
id _delegate;
}
- (void)runThread;
- (void)threadLoop:(id)info;
@end
@implementation ThreadObject
- (void)runThread {
[NSThread detachNewThreadSelector:@selector(threadLoop:) toTarget:self withObject:nil];
}
- (void)threadLoop:(id)info
{
NSAutoreleasePool *pool = [NSAutoreleasePool new];
int count = 0;
while(1) {
[_delegate performSelectorOnMainThread:@selector(updateCounterField:) withObject:[NSNumber numverWithInt:count++] waitUntilDone:NO];
[NSThread sleepUntilDate:[NSDate dateWithTimeIntervalSinceNow:0.5]];
}
[pool release];
[NSThread exit];
}
@end
こんな雰囲気という事で(動作未確認)












