我目前有这个函数,init是我的用户默认值:
+ (void)initialize
{
// Create a dictionary to hold the default user preference values
NSMutableDictionary *defaultValues = [NSMutableDictionary dictionary];
// Put defaults in the dictionary
[defaultValues setObject:@(YES) forKey:@"pref key 1"];
... (further inits)
MyCStruct struct;
struct.width = struct.height = 0;
struct.frameDuration = struct.frameTimeScale = 0;
NSValue* structDefaultValue = [NSValue value:&struct
withObjCType:@encode(MyCStruct)];
[defaultValues setObject:structDefaultValue
forKey:@"myPrefKey"];
// Register the dictionary of defaults
[[NSUserDefaults standardUserDefaults] registerDefaults: defaultValues];
}
我在注册默认值时在“CFRetain”中获得了一个Obj-C异常断点。 在使用NSValue之前,一切都很好,所以我确信这与记忆有关。我知道结构只在本地函数堆栈上有效,所以我想知道这是不是问题? NSValue是否复制了它获取指针的值?
我应该在堆上创建结构吗?
谢谢!
答案 0 :(得分:2)
您无法将NSValue
直接存储到用户默认值中,因为它由plist支持。因此,字典中的所有条目都需要对plist中的存储有效。考虑将值存储为基本整数或将结构编码为数据或字符串格式。