问题描述
|
我刚才注意到,当我在dealloc方法中保存对象状态(ѭ0转换为
Nsstring
)时,使用
+(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];
}
错误的值被保存!如果我只是在发布前保存这些值,则会保存正确的值。请注意,我在结尾处小心地叫ѭ3。为什么是这样?
解决方法
该代码有几个问题;
在-dealloc中保存状态为时已晚。在调用-dealloc时,对象图处于被拆除的状态。
在应用终止时,系统不会浪费时间来破坏您的应用。它只会通知它即将终止,然后终止它。如果您依靠-dealloc进行调用,则可能永远不会发生。
该方法名称不是很好。试试like4ѭ。但是,可能会被多次调用的隐含含义将导致严重的效率低下(因为它会一遍又一遍地写出偏好plist)。
输入值的可变字符串副本浪费了周期和内存;不需要它
除非您需要CFPreferences *()的扩展功能,否则应该坚持使用NSUserDefaults;它将导致更少的代码和更少的脆弱性。