gpt4 book ai didi

ios - CGImageRef的NSArray存在问题(但不是在模拟器上!)

转载 作者:行者123 更新时间:2023-12-01 16:50:41 25 4
gpt4 key购买 nike

我试图将一些CGImageRefs放入NSArray中。它可以在模拟器上正常运行,但不能在设备上运行-在我尝试形成EXC_BAD_ACCESS代码= 1错误的数组时会崩溃。我也尝试了其他方法,例如从可变数组开始,但这也不起作用。在控制台中输入bt的结果是

(lldb) bt
* thread #1: tid = 0x2403, 0x3a9b25b6 libobjc.A.dylib`objc_msgSend + 22, stop reason = EXC_BAD_ACCESS (code=1, address=0x86ea78f7)
frame #0: 0x3a9b25b6 libobjc.A.dylib`objc_msgSend + 22
frame #1: 0x32a98b5e CoreFoundation`+[__NSArrayI __new:::] + 58
frame #2: 0x00042388 NameOfMyApp

因此,基本上,我有许多图像和字母,并且有许多层代表单词中的位置,每个位置都应循环遍历它们。例如,layer1显示letterC,然后letterF,然后letterP等,而layer2显示其他序列。

我以为我每个字母要加载一次...
CGImageRef letterH = [UIImage imageWithContentsOfFile:letterHfilename].CGImage;
CGImageRef letterI = [UIImage imageWithContentsOfFile:letterIfilename].CGImage;

...并将CGImageRefs放入NSArray属性中,强制转换为id:
self.titleLetters = @[(__bridge id)letterH, (__bridge id)letterI;

然后我再做
layerN.contents = self.titleLetters[i];

但更重要的是,我必须能够将它们(可能是每次)放置在另一个数组中:
[contentsValuesArray addObject:self.titleLetters[j]];

然后将该数组用作keyFrameAnimation的值:
CAKeyframeAnimation* contentsAnim = [CAKeyframeAnimation animationWithKeyPath:@"contents"];
contentsAnim.values = contentsValuesArray;

每次,所有这些在模拟器中都可以正常工作。

如我所说,我尝试了一些变体,并且似乎唯一起作用的是使用arrayWithObject形成了一个仅包含一个字母imageref的可变数组。即使那样,它有时仍然起作用,并且在我的程序中崩溃得更深。

我似乎在某处读到了不保留CGImageRefs的信息,以便在我使用它们之前就可以将其释放。自从在ARC引入后我开始编码以来,我对发布几乎一无所知,并且由于它一直可以在模拟器上运行,所以我认为这不适用于我的情况。

另外,在此回复中:

How do I create a mutable array of CGImageRefs?

一位从事Cocoa Frameworks工作的人说,尽管他没有提供任何细节,但它应该可以工作,因此可能暗示了这一点。

任何帮助和建议将不胜感激。

编辑已解决
似乎问题出在当我尝试将它们添加到数组中时,确实确实没有imagerefs,这是因为它们已经被释放了。显然,需要使用CGImageRetain保留它们。现在可以正常工作,我只需要确保它们在以后发布即可。

最佳答案

解决的办法是在我什至没有时间使用它们之前就发布了imagerefs。除非是使用CGImageRetain保留它们,否则这似乎会立即发生(至少在设备上)。

关于ios - CGImageRef的NSArray存在问题(但不是在模拟器上!),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16201262/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com