【发布时间】:2013-08-28 16:45:34
【问题描述】:
我的 Objective-C 代码中有一个这样的结构 >
typedef struct {
__unsafe_unretained NSString *string1;
__unsafe_unretained NSString *string2;
__unsafe_unretained NSString *string3;
__unsafe_unretained NSString *string4;
__unsafe_unretained NSString *string5;
.
.
.
__unsafe_unretained NSString *string10;
} MyStruct;
在我的模型类中,我将这些结构存储在声明的数组中
@property (nonatomic, strong) NSMutableArray *myStructArray;
我在运行时像这样在我的 .m 文件中构造它
NSMutableArray *myTempArray = [NSMutableArray array];
for (NSDictionary *jsonDict in jsonArray)
{
MyStruct stringsStruct = parseWithDictionary(jsonDict);
[myTempArray addObject:[NSValue value:&stringsStruct withObjCType:@encode(MyStruct)]];
}
myObject.myStructArray = myTempArray;
问题是当我在解析/构造内部对象后尝试访问它时,我收到了错误
-[CFURL length]: message sent to deallocated instance
顺便说一下,这是我稍后访问属性的方式,
MyStruct myStruct;
[[myObject.myStructArray objectAtIndex:someIndex] getValue:&myStruct];
NSLog(@"%@",myStruct.string1); // << bam! crash
我该如何解决这个问题?有没有办法确保对象保持完整而不会解除分配,直到我完成它?我正在使用 ARC,因此无法使用 __unsafe_unretained 删除。
【问题讨论】:
-
我不明白这个结构的目的是什么。为什么它不是对象或嵌套数组。从它作为一个结构开始,你会得到什么样的好处?你也可以在创建后直接访问它们,基本上你确定它们的初始化开始了吗?
标签: objective-c struct automatic-ref-counting