ipad应用程序在新的iOS 4.1.2上崩溃,但在3.2上运行

时间:2011-01-19 16:13:06

标签: ipad ios4 memory-leaks

我有一个应用程序,我在其中播放启动视频并添加了一些自定义字体。

该应用程序在ipad 3.2上工作正常,但在4.2等它崩溃。日志说我发布了一些我认为可以分配的东西。我已经检查了我的代码一百次而且我没有做任何这样的事情。

它可以在模拟器和设备上运行(均为3.2)

任何想法?

编辑:

<Error>: df(7903,0x3e3d7898) malloc: *** error for object 0x1a11b0: pointer being freed was not allocated
*** set a breakpoint in malloc_error_break to debug
Wed Jan 19 20:35:38 unknown UIKitApplication:com..imagazine[0x9c7c][7903]                         <Notice>: def(7903,0x3e3d7898) malloc: *** error for object 0x1a11b0: pointer being           freed was not allocated
 Wed Jan 19 20:35:38 unknown UIKitApplication:com.imagazine[0x9c7c][7903] <Notice>: *** set a breakpoint in malloc_error_break to debug
   Wed Jan 19 20:35:39 unknown ReportCrash[7905] <Notice>: Formulating crash report for process df[7903]
  Wed Jan 19 20:35:39 unknown com.apple.launchd[1] <Warning>: (UIKitApplication:com.imagazine[0x9c7c]) Job appears to have crashed: Abort trap
  Wed Jan 19 20:35:39 unknown SpringBoard[27] <Warning>: Application 'df' exited abnormally with signal 6: Abort trap
  Wed Jan 19 20:35:39 unknown ReportCrash[7905] <Error>: Saved crashreport to /var/mobile/Library/Logs/CrashReporter/df_2011-01-19-203538_Sumas-iPad.plist using uid: 0 gid: 0, synthetic_euid: 501 egid: 0

解决方案:

首先使用NSZombies,你会发现这样的错误。

问题:我每0.2秒设置一次定时器,它正在清理UIView并分配它,不是每隔0.2秒,而是每5秒一次。 我做了标准检查:

  if(vewCustom!= nil) {
      [vewCustom removeFromSuperView];
      [vewCustom release];
      vewCustom = nil;
   }

但奇怪的是,我已经对代码进行了数百次验证,并且我没有过度发布,无论是在iOS4.2 for iPhone上如何工作。

我删除了计时器,但它仍然崩溃,然后我删除了该版本,现在它工作正常。

奇怪但如果有人能解释我做错了什么就会好。

3 个答案:

答案 0 :(得分:1)

假设日志为真。找到它的最简单方法是启用Zombies,然后彻底运用你的应用程序。见这里(提示#1):

http://loufranco.com/blog/files/debugging-memory-iphone.html

要做的另一件事是构建和分析并查看它标记的每件事。根据我的经验,很少有误报。

答案 1 :(得分:1)

您可以尝试在启用僵尸的调试中运行该应用。通过这种方式,您可以在过度释放的对象上获得堆栈跟踪,这是一个关于如何设置它的链接。

http://iosdevelopertips.com/debugging/tracking-down-exc_bad_access-errors-with-nszombieenabled.html

答案 2 :(得分:1)

在寻找其他东西时注意到这一点。崩溃的原因是removeFromSuperview导致superview释放视图。因此,随后的发布是多余的(过度释放)。 ARC不会成为问题,但在其他情况下会引起一些混乱