gpt4 book ai didi

objective-c - 在 ARC 下正确定义静态 NSString* c 样式数组

转载 作者:搜寻专家 更新时间:2023-10-30 20:25:28 24 4
gpt4 key购买 nike

在我的实现文件中,我有一个 NSString* 的静态二维 C 样式数组,定义为:

static NSString* TheColorArray[][3] = {
[RedType] = {@"red", @"blah", @"YES"},
[BlueType] = {@"blue", @"yadda", @"YES"},
.....
}

有问题的方法像这样访问数组:

-(NSString*)value:(NSInteger)value {
return TheColorArray[value][0];
}

这一切似乎在大约 99% 的时间里都能正常工作……但是当它无法工作时,它总是会失败并显示 EXC_BAD_ACCESS - KERN_INVALID_ADDRESS at 0x11

我已验证我的 value 参数没有超出数组的范围。地址是 0x11 似乎很奇怪...这暗示数组尚未初始化。

那么这里发生了什么?对于 ARC 和 C 风格的数组,是否有一些我需要注意的“问题”?

最佳答案

文档清楚地表明结构 不能包含 ARC 对象,我们可以争辩说这也适用于多维数组数据,尽管它没有这么说。你试过这个吗:

静态 NSString __unsafe_unretained * TheColorArray[][3] = ...

这会将此处分配的对象从 ARC 中取出,并消除编译器在不应该的地方主动置空的任何可能性。

假设这就是问题所在。也许如果您能够使用调试器退后一步,您能看到错误时取消引用的符号是什么吗?

关于objective-c - 在 ARC 下正确定义静态 NSString* c 样式数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14988735/

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