【发布时间】:2011-01-19 16:13:06
【问题描述】:
我有一个应用程序,我可以在其中播放启动视频并添加了一些自定义字体。
该应用程序在 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 上如何工作。
我删除了 Timer,但它仍然崩溃,然后我删除了版本,现在它可以正常工作了。
很奇怪,但如果有人能解释我做错了什么就好了。
【问题讨论】:
-
向我们展示你的崩溃报告中关于崩溃线程的回溯。也是报告中显示的异常类型。
-
它“工作”并不重要。错误的代码有时会起作用。您是如何创建 vewCustom 的?您是否在超级视图拥有的参考之外持有参考? vewCustom 是不是带有 retain 的属性?
-
是的,它有一个保留属性,是的,它在超级视图之外有一个引用。但我检查了是否为 nil,然后才释放它。
-
检查 nil 没有帮助。您可以查看retainCount,但这并不能告诉您自动释放是否处于挂起状态。我认为构建和分析会给你一个线索。
标签: ipad ios4 memory-leaks