内存管理- exc坏访问iPhone错误



我得到一个错误称为线程1:程序接收信号:"EXC_BAD_ACCESS"这是我的代码

[gameArray removeLastObject];
[gameArray addObject:shotArray];
[gamesArray removeObjectAtIndex:gameNumber];
[gamesArray insertObject:gameArray atIndex:gameNumber];
NSString *path = [self findGamesPath];
[NSKeyedArchiver archiveRootObject:gamesArray toFile:path]; // the error is here

为什么会出现错误?某些内容是否被发布了太多次?

这是findGamesPath代码

-(NSString *)findGamesPath {NSArray *paths = nssearchpathfordirectortoriesindomains (NSDocumentDirectory, NSUserDomainMask, YES);NSString *documentFolder = [paths objectAtIndex:0];NSString *result = [documentFolder stringByAppendingPathComponent:@"iShotTrackGames.plist"];返回结果;}

更有可能的是,某些东西被发布了太多次。打开僵尸检测,再试一次。

在你这样做之前,试着对你的代码执行"构建和分析",并修复它识别的任何问题。

我看到它被标记为"线程安全"。为什么?也就是说,当上面的代码正在运行时,其他线程可能在做什么?

EXC_BAD_ACCESS表示您在某个地方有一个坏指针。这些错误通常很容易发现,因为错误指针是在发生错误的行中调用的方法的参数之一。在这种情况下,归档器将遍历gamesArray所指向的整个对象图,而错误指针可能在其中的任何地方。按照@bbum的建议打开NSZombies——这将帮助你找出哪个指针有问题。

我想我知道是怎么回事了。你的路径字符串在findGamePath方法中失去作用域。

你是否在该方法中分配路径字符串并返回它?

一旦失去作用域,就从内存中释放。

尝试访问该字符串将导致EXC_BAD_ACCESS,因为您正在访问一个已释放的对象。

你能把findGamePath代码贴在这里吗?这可能会更清楚地说明问题。

哦,这与内存管理有关,而不是线程安全。

最新更新