Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/39.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone ios刮卡效果崩溃_Iphone_Ios_Core Graphics - Fatal编程技术网

Iphone ios刮卡效果崩溃

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,我不认为我可以将自己的视图控制器转换为

我需要在游戏中使用刮擦效果。下面是几年前的一个示例代码

它工作得很好,但当我把它和导航控制器一起使用时,它崩溃了

我的项目使用ARC,我将文件标记为-fno objc ARC。以下是源代码:

当我按下视图控制器,然后弹出,然后重新进入时,它崩溃

编辑:

将all转换为arc,并将使用scratch视图的视图控制器标记为-fno objc arc时,它会工作。但是当您将scratch视图标记为-fno objc arc时,它会再次崩溃。我的项目使用arc,我不认为我可以将自己的视图控制器转换为be-fno objc arc

编辑2:

我将初始化代码修改为:

    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。