首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ios scratch card效果崩溃

ios scratch card效果崩溃
EN

Stack Overflow用户
提问于 2013-06-08 13:16:40
回答 3查看 1.7K关注 0票数 8

我需要在我的游戏中使用划痕效果。以下是几年前的示例代码。

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:

我将初始化代码修改为:

代码语言:javascript
复制
    scratchable = CGImageRetain([UIImage imageNamed:@"scratchable.jpg"].CGImage);

它不再崩溃,但有一个内存泄漏。在dealloc方法中,CGImageRelease确实被调用过一次。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-06-10 16:28:10

使用CGImageCreateCopy

这样做的原因是你在dealloc上给你的CGImageRef发送了一个版本,但是如果你检查实际的CGImage对象,你会发现它每次都指向相同的内存地址(我猜这是苹果优化的一部分,所以就像你有一个static UIImage对象并引用了它的CGImage一样)。

所以在你的initWithFrame:中,你应该像这样得到你的scratchable:

代码语言:javascript
复制
UIImage *sci = [UIImage imageNamed:@"scratchable.jpg"]; // This guy is always the same
scratchable = CGImageCreateCopy(sci.CGImage);

PS:你的pixels确实泄露了,所以你还需要一个CFRelease(pixels);

我对代码进行了测试、分析和测量,现在看起来一切正常。

Here is also a link to the fixed project (我还放了一个导航控制器和一个按钮来推动/弹出)--当然也使用了ARC。

票数 4
EN

Stack Overflow用户

发布于 2014-02-06 05:37:56

票数 1
EN

Stack Overflow用户

发布于 2015-10-12 12:32:21

在AppDelegate.m中

代码语言:javascript
复制
   [window addSubview:viewController.view];

您应该将其替换为:

代码语言:javascript
复制
   [window setRootViewController:viewController];
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16996351

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档