1

我正在构建一个随机提取图像的游戏。在做了一些测试后,我意识到如果同一个图像被调用两次,它就会崩溃。我通过完成第一场比赛后了解到这一点,我返回游戏主菜单并选择再次玩。我最终得到了一张在我之前的游戏中已经显示给我的图像,一秒钟后我的应用程序崩溃了。我做了一些测试,在我的第一场比赛中两次显示相同的图像,并在第二次显示图像后一秒钟崩溃。

这是一个示例代码。“idNum”和“timer”在 .h 文件中声明,因此它们是全局的。如您所见,我有每秒运行一次的 NSTimer 来随机化要拉出的新图像。在尝试第二次显示图像之前查找作品。假设我得到 1,3,2,5,3 的随机顺序。它将在第二个 3 崩溃。

你不能两次调用图像吗?我只能认为这是一个缓存问题,我不确定如何释放图像缓存。我收到错误 objc_msgSend。抱歉,在调试崩溃方面不太擅长。

//idNum = the randomly generated integer
//pictures are called by numbers ex(1.jpg, 5.jpg)



timer = [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(timeCounter) userInfo:nil repeats:YES];


-(void)timeCounter {
time = time + 1;

    idNum = (arc4random() % 5);

    NSString * imgIDnum = [[NSString alloc] initWithFormat:@"%d", idNum];
    imgMain = [NSString stringWithFormat:@"%@%@", imgIDnum, @".jpg"];
    [imgIDnum release];

    UIImage * daImg = [UIImage imageNamed:imgMain];
    [imgView setImage:daImg];



  }
4

2 回答 2

0

您应该提供有关崩溃的更多信息。是在上面的+imageNamed:行中,还是在-setImage:

最可能的原因是您过度释放UIImage. 例如,如果你在[daImg release]上面的代码之后调用,那么你会得到这种行为,因为你会过度释放UIImage类正在缓存的东西。在您描述的情况之前,这不会导致崩溃。

我见过这个错误的一个非常有趣的版本:我的一个队友过度释放了一个 NSNumber(它恰好是整数 2 大多数时间)。NSNumbers 是在内部缓存的,所以下次他为整数 2 创建一个 NSNumber 时,在程序的无关部分中,它会崩溃。任何其他数字都很好,但尝试到NSLog()2,然后繁荣。

于 2009-09-02T22:11:23.370 回答
0

好吧,我很抱歉地说我已经解决了这个问题,但不知道如何解决。我最终重写了大部分代码,添加、删除和更改了一些片段,以便对内存管理更加友好。当我再次运行它时,一切都很好。抱歉没有解决方案。如果其他人遇到此问题,请告诉我,我会尽力提供帮助。

于 2009-09-03T23:21:38.503 回答