我刚刚注意到,当我在dealloc方法中保存对象状态(@public float
s转换为NSString
s)时,使用
+(void)savePreferences:(NSString*)key :(NSString*)value{
NSMutableString* mutableString=[[NSMutableString alloc]initWithString:value];
CFPreferencesSetAppValue((CFStringRef)key, mutableString, kCFPreferencesCurrentApplication); // Set up the preference.
CFPreferencesAppSynchronize(kCFPreferencesCurrentApplication);// Write out the preference data.
[mutableString release];
}
保存错误的值!?如果我在释放之前保存值,则保存正确的值。请注意,我谨慎地在结束处致电[super dealloc];
。这是为什么?
答案 0 :(得分:2)
该代码的几个问题;
在-dealloc中保存状态为时已晚。在调用-dealloc时,对象图正在被拆除。
在应用程序终止时,系统不会浪费周期拆除您的应用程序。它只是通知它即将被终止然后终止它;如果您依赖-dealloc进行调用,则可能永远不会发生。
方法名称不是很好。尝试类似savePreferencesValue:forKey:
的内容。然而,它可能被多次调用的含义会导致严重的不足(因为它会反复写出偏好)。
传入值的可变字符串副本是浪费周期和内存;不需要它
除非您需要CFPreferences *()的扩展功能,否则您应该坚持使用NSUserDefaults;这将导致更少的代码和更少的脆弱性。