OMG*_*POP 8 iphone core-graphics ios
我需要为我的游戏使用划痕效果.这是几年前的示例代码.
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);
Run Code Online (Sandbox Code Playgroud)
它不再崩溃,但是有内存泄漏.并且在dealloc方法中调用CGImageRelease一次.
使用CGImageCreateCopy
。
这样做的原因是你向你发送了一个版本CGImageRef
,dealloc
但是如果你检查实际的CGImage
对象,你会发现它每次都指向相同的内存地址(我猜这是Apple优化的一部分,所以它就像你一样将有一个static UIImage
对象并引用它CGImage
)。
所以在你的文件中initWithFrame:
你应该像这样得到你的可刮擦:
UIImage *sci = [UIImage imageNamed:@"scratchable.jpg"]; // This guy is always the same
scratchable = CGImageCreateCopy(sci.CGImage);
Run Code Online (Sandbox Code Playgroud)
PS:您确实发生了泄漏pixels
,因此您还需要CFRelease(pixels);
我测试、分析和测量了代码,现在看起来没问题了。
这里还有一个固定项目的链接(我还放置了一个导航控制器和一个用于推送/弹出的按钮) - 当然使用 ARC。
归档时间: |
|
查看次数: |
1607 次 |
最近记录: |