我有一个派生自的类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];
thendealloc
被调用,这意味着保留计数为 2。但它是如何变为 2 的?
请注意,NSThread
仅提及使用时保留的文档detachNewThreadSelector:toTarget:withObject:
。