私はから派生したクラスを持っていますNSThread
:
@interface FSEventMonitorThread : NSThread {
FSEventStreamRef m_fseStreamRef;
CFRunLoopRef m_runLoop;
}
- (id) initWithStream:
(FSEventStreamRef)fseStreamRef;
- (void) dealloc;
- (void) main;
@end
@implementation FSEventMonitorThread
- (id) initWithStream:
(FSEventStreamRef)fseStreamRef
{
if ( self = [super init] )
m_fseStreamRef = fseStreamRef;
return self;
}
- (void) dealloc
{
CFRunLoopStop( m_runLoop );
FSEventStreamStop( m_fseStreamRef );
[super dealloc];
}
- (void) main
{
m_runLoop = CFRunLoopGetCurrent();
FSEventStreamScheduleWithRunLoop(
m_fseStreamRef, m_runLoop, kCFRunLoopDefaultMode
);
FSEventStreamStart( m_fseStreamRef );
CFRunLoopRun();
}
@end
他の場所(C ++関数内)で、インスタンスを作成します。
m_thread = [[FSEventMonitorThread alloc] initWithStream:m_fseStreamRef];
私の理解では、retain-countは1になっているはずです。別のC ++関数で、スレッドを停止して割り当てを解除したいと思います。
[m_thread release];
しかし、dealloc
メソッドは呼び出されません。代わりに私がする場合:
[m_thread release];
[m_thread release];
次にdealloc
、retain-countが2であったことを意味するように呼び出されます。しかし、どのようにして2になったのでしょうか。
NSThread
のドキュメントでは、を使用する場合の保持についてのみ言及していることに注意してくださいdetachNewThreadSelector:toTarget:withObject:
。