【发布时间】:2013-06-08 05:16:39
【问题描述】:
我需要为我的游戏使用划痕效果。这是几年前的示例代码。
https://github.com/oyiptong/CGScratch
它工作得很好,但是当我将它与导航控制器一起使用时,它会崩溃。
我的项目使用 ARC,我将文件标记为 -fno-objc-arc。以下是源代码:
https://github.com/lifesaglitch/ScratchWithError
当我按下视图控制器,然后弹出,然后重新进入时它会崩溃。
编辑:
当您将 all 转换为 arc,并将使用暂存视图的视图控制器标记为 -fno-objc-arc 时,它可以工作。但是,当您将临时视图标记为 -fno-objc-arc 时,它会再次崩溃。我的项目使用arc,我认为我不能将自己的视图控制器转换为-fno-objc-arc。
编辑2:
我修改初始化代码为:
scratchable = CGImageRetain([UIImage imageNamed:@"scratchable.jpg"].CGImage);
它不再崩溃,但存在内存泄漏。并且 CGImageRelease 确实在 dealloc 方法中被调用过一次。
【问题讨论】:
-
如果没有崩溃日志或领事的报告,就不可能说出如何修复代码使其不会崩溃,除非有人有水晶球。
-
@CodeMonkey 相信我,有时应用程序在没有日志的情况下崩溃
-
这是合乎逻辑的,但是您发布的代码很好,除非您可以重新创建崩溃并查看日志,否则几乎不可能确定问题所在。
-
@CodeMonkey 我正在尝试,但这次我的模拟器只是挂起。你能做一个简单的项目吗?这真的很简单。我已经提供了下载链接。我只是推一个控制器,弹出它然后重新推
-
我发现您发布的代码和 github 上的项目没有任何根本性的错误。我的猜测是您没有正确管理内存,这很容易做到,尤其是当您混合使用 ARC 和 MRC 时。我建议您只需花几分钟时间来修改“旧”的可刮擦视图代码,使其符合 ARC,并将 ARC 用于您的整个项目。
标签: iphone ios core-graphics