NSThread第二次调用(在第一次没完成之后)得到“EXC_BAD_ACCESS”

时间:2010-09-10 00:38:03

标签: multithreading xcode exc-bad-access

我有一个封面流程,它有3个不同的图像集。其中一个需要生成,我一直试图用一个线程来填充更大的图像选择。

以下是我的一些代码:

- (void) startSongThread {
    [NSThread detachNewThreadSelector:@selector(songThreadMain) toTarget:self withObject:nil];   
}

- (void) songThreadMain {

    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];

    int i = 0;

    while(i < [items count] && ![[NSThread currentThread] isCancelled]) {

        NSNumber *nsInt = [NSNumber numberWithInt:i];
        if(![addedSongIndexes containsObject:nsInt]) [self setSongImage:nsInt];
        i++;

    }

    [pool release];

}

- (void) stopSongThread {
    if(![[NSThread currentThread] isCancelled]) [[NSThread currentThread] cancel];    
}

当图像从一种类型变为另一种类型时,会调用stopSongThread方法。

如果我加载所有主图像,切换图像集然后切换回主集我总是得到EXC_BAD_ACCESS。

我尝试分配线程,但它只能工作一次..如果我让它加载而不是试图阻止它,它的效果很好。

任何帮助都会很棒,谢谢!

1 个答案:

答案 0 :(得分:0)

这不是一个完整的答案。但是我决定将我的游戏计划稍微改变一下我使用该线程的方式。

基本上我用一个线程来创建一个新的空类来生成大拇指。当我填充封面流时,我检查线程类是否构建了一个图像。这似乎工作到目前为止我将继续调整它,直到它超级顺利!

由于