Iphone ios刮卡效果崩溃
我需要在游戏中使用刮擦效果。下面是几年前的一个示例代码 它工作得很好,但当我把它和导航控制器一起使用时,它崩溃了 我的项目使用ARC,我将文件标记为-fno objc ARC。以下是源代码: 当我按下视图控制器,然后弹出,然后重新进入时,它崩溃 编辑: 将all转换为arc,并将使用scratch视图的视图控制器标记为-fno objc arc时,它会工作。但是当您将scratch视图标记为-fno objc arc时,它会再次崩溃。我的项目使用arc,我不认为我可以将自己的视图控制器转换为be-fno objc arc 编辑2: 我将初始化代码修改为:Iphone ios刮卡效果崩溃,iphone,ios,core-graphics,Iphone,Ios,Core Graphics,我需要在游戏中使用刮擦效果。下面是几年前的一个示例代码 它工作得很好,但当我把它和导航控制器一起使用时,它崩溃了 我的项目使用ARC,我将文件标记为-fno objc ARC。以下是源代码: 当我按下视图控制器,然后弹出,然后重新进入时,它崩溃 编辑: 将all转换为arc,并将使用scratch视图的视图控制器标记为-fno objc arc时,它会工作。但是当您将scratch视图标记为-fno objc arc时,它会再次崩溃。我的项目使用arc,我不认为我可以将自己的视图控制器转换为
scratchable = CGImageRetain([UIImage imageNamed:@"scratchable.jpg"].CGImage);
它不再崩溃,但内存泄漏。而CGImageRelease确实在dealloc方法中被调用过一次 使用
CGImageCreateCopy
这样做的原因是您在dealloc
处向cgimagerf
发送了一个释放,但是如果您检查实际的CGImage
对象,您将看到它每次都指向相同的内存地址(我想这是苹果优化的一部分,所以它就像你有一个静态UIImage
对象并引用它的CGImage
)
因此,在您的initWithFrame:
中,您应该获得如下可刮性:
UIImage *sci = [UIImage imageNamed:@"scratchable.jpg"]; // This guy is always the same
scratchable = CGImageCreateCopy(sci.CGImage);
PS:您的像素实际泄漏,因此您还需要CFRelease(像素);
我对代码进行了测试、分析和测量,现在看起来一切正常
(我还放置了一个导航控制器和一个按钮来按下/弹出)-当然,还使用了ARC。这一个对我很有用!在AppDelegate.m中
[window addSubview:viewController.view];
您应该将其替换为:
[window setRootViewController:viewController];
如果没有崩溃日志或领事的报告,就无法说明如何修复代码,使其不会崩溃,除非有人有一个水晶球。@CodeMonkey相信我,有时应用程序崩溃没有日志这是合乎逻辑的,但你发布的代码是好的,除非你能重新创建崩溃并查看日志,否则几乎不可能确定在哪里问题是。@CodeMonkey我正在尝试,但这次我的模拟器只是挂起。你能做一个简单的项目吗?真的很简单。我已经提供了下载链接。我只是推一个控制器,弹出它,然后再推。我在你发布的代码和github上的项目中看不到任何根本错误。我猜你没有正确管理内存y、 这很容易做到,特别是当你混合使用ARC和MRC时。我建议你花几分钟修改“旧的”可擦写视图代码,使其符合ARC,并在整个项目中使用ARC。