iPhone编程:使用MKMapView的奇怪错误

时间:2010-07-14 14:16:25

标签: iphone crash mkmapview

我正在使用iPhone应用程序,有时在操作地图时我会收到这个奇怪的日志:

ImageIO_Free: ptr 0xdf0f000 got double released??? (16384 bytes)

如果我指望玩游戏,应用程序会崩溃。 我用谷歌搜索,但没有发现任何有趣的东西......太奇怪了!

5 个答案:

答案 0 :(得分:4)

Apple开发者论坛上有一个单独的帖子可以更清楚地说明这一点:“Map kit related crash?

回复帖子的人有更详细的诊断信息,它表明崩溃发生在一个单独的线程中,但他没有产生任何线程,可能导致他得到的行为/崩溃。

你应该file a bug with Apple

答案 1 :(得分:1)

没有我的水晶球,我只能猜测,但你可能会release手动标记为autorelease的东西。

阅读Memory Management Programming Guide,尤其是Memory Management Rules!两次。

答案 2 :(得分:0)

这很可能是一个警告,即同一个对象已经向ImageIO_Free对象发送了比发送显式或隐式保留更多的释放。 ImageIO_Free过度释放,随后意外死亡导致崩溃。

答案 3 :(得分:0)

我随机也有这个问题......

ImageIO_Free:ptr 0xd700000被双重释放??? (16384字节)哈希:0

不知道如何解决。似乎是框架的问题。

答案 4 :(得分:0)

这恰好发生在我身上,我相信我有答案。

问题似乎是在地图视图中添加注释。看来,当您在MKMapView实例上调用“addAnnotations”时,MKMapView对象不会保留这些对象。因此,在您使用地图后,将注释移入和移出视图,当需要重新呈现注释时,内存已被释放,并且您收到EXC_BAD_ACCESS错误。

要解决此问题,只需保留要添加为注释的对象即可。这可以通过使用映射当前注释的NSMutableArray实例变量来实现。每次调用addAnnotations时,也要将这些对象添加到此保留的数组中,您应该全部设置。

在你的.h文件中:

@interface MapViewController : TTModelViewController <MKMapViewDelegate, UIAlertViewDelegate> {
  NSMutableArray *feeds;
}
@property (nonatomic, retain) NSMutableArray *feeds;

在您的.m文件中:

@synthesize feeds;
// (release feeds in your dealloc)

当您添加注释时,请执行以下操作:

if (self.feeds == nil) {
  self.feeds = [NSMutableArray array];
}
[self.feeds addObjectsFromArray:newPois]; // newPois is an array of annotations
[mapView addAnnotations:newPois];

到目前为止为我工作。如果事情发生变化会更新。如果从地图视图中删除对象,您可能还希望保持此Feed数组同步,以避免“死记忆”。