【发布时间】:2012-10-19 20:33:35
【问题描述】:
我需要一个额外的后台线程来监听来自套接字的请求。
代码被放入单例类中;它将在 NSApplicationMain() 之前的 main.m 中调用,如下所示:
[[SKSocketThread getSingleton] runThread];
而runThread的定义如下:
- (void) runThread {
[NSThread detachNewThreadSelector:@selector(socketThreadMainLoop:)
toTarget:self
withObject:[self quitLock]];
}
- (void) socketThreadMainLoop:(id)param {
NSLock *lock = (NSLock *)param;
while (![lock tryLock]) {
NSLog(@"Yay! We are in socketThreadMainLoop now!");
[NSThread sleepForTimeInterval:2];
}
NSLog(@"Terminating the socket thread...");
[lock unlock]; // is it really necessary?
}
编译成功,没有任何警告,但在运行时会抛出错误:
autoreleased with no pool in place.
我做了一些谷歌搜索,尝试使用 @autoreleasepool 将代码打包到 runThread 和 socketThreadMainLoop 中,但错误仍然存在。最后,我在 main.m 中封装了对 runThread 的调用,并且成功了!
我不知道为什么它只能这样工作......
【问题讨论】:
标签: objective-c automatic-ref-counting