后台线程中的SIGSEGV NSRunLoop runMode:beforeDate:

时间:2013-09-12 09:22:24

标签: ios objective-c multithreading sigsegv nsrunloop

我正在使用具有以下模式的后台线程:

// 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 +)和设备类型。

  • 可能有人暗示我,我做错了什么?
  • 有没有更好的解决方案来做后台线程? (也许使用GCD)
  • 有没有办法重现这些问题?

感谢您的时间和指导。 :)

0 个答案:

没有答案