次のパターンでバックグラウンド スレッドを使用しています。
// 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を使用)
- これらの問題を再現する方法はありますか?
お時間をいただき、ご指導いただきありがとうございました。:)