我正在使用具有以下模式的后台线程:
// Defined in .h-file as ivar
BOOL backgroundThreadIsAlive;
// .m file
static NSThread *backgroundThread = nil;
- (id)init
{
if (self = [super init])
{
if (backgroundThread == nil)
{
backgroundThreadIsAlive = YES;
backgroundThread = [[NSThread alloc] initWithTarget:self selector:@selector(threadMain:) object:nil];
[backgroundThread start];
}
}
return self;
}
- (void)threadMain:(id)data
{
NSRunLoop *runloop = [NSRunLoop currentRunLoop];
[runloop addPort:[NSMachPort port] forMode:NSDefaultRunLoopMode];
while (backgroundThreadIsAlive)
{
[runloop runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]];
}
}
我的应用程序有时会在行
中与SIGSEGV一起崩溃[runloop runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]];
我正在使用ARC。崩溃是不可重复的。刚刚发现它,在潜入testflight时看到这是我经常遇到的崩溃。它似乎独立于iOS版本(我支持iOS5 +)和设备类型。
感谢您的时间和指导。 :)