在dealloc中保存对象状态不起作用

时间:2011-04-14 05:11:05

标签: iphone objective-c release dealloc

我刚刚注意到,当我在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];。这是为什么?

1 个答案:

答案 0 :(得分:2)

该代码的几个问题;

  • 在-dealloc中保存状态为时已晚。在调用-dealloc时,对象图正在被拆除。

  • 在应用程序终止时,系统不会浪费周期拆除您的应用程序。它只是通知它即将被终止然后终止它;如果您依赖-dealloc进行调用,则可能永远不会发生。

  • 方法名称不是很好。尝试类似savePreferencesValue:forKey:的内容。然而,它可能被多次调用的含义会导致严重的不足(因为它会反复写出偏好)。

  • 传入值的可变字符串副本是浪费周期和内存;不需要它

  • 除非您需要CFPreferences *()的扩展功能,否则您应该坚持使用NSUserDefaults;这将导致更少的代码和更少的脆弱性。