我需要一个额外的后台线程来监听来自套接字的请求。
代码放入单例类;它将在 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 的调用,并且成功了!
我不知道为什么它只能这样工作......