我正在使用iPhone应用程序,有时在操作地图时我会收到这个奇怪的日志:
ImageIO_Free: ptr 0xdf0f000 got double released??? (16384 bytes)
如果我指望玩游戏,应用程序会崩溃。 我用谷歌搜索,但没有发现任何有趣的东西......太奇怪了!
答案 0 :(得分:4)
Apple开发者论坛上有一个单独的帖子可以更清楚地说明这一点:“Map kit related crash?”
回复帖子的人有更详细的诊断信息,它表明崩溃发生在一个单独的线程中,但他没有产生任何线程,可能导致他得到的行为/崩溃。
答案 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数组同步,以避免“死记忆”。