iphone - 在 -(void)dealloc 中同步 NSUserDefaults 是一种不好的形式吗?

标签 iphone nsuserdefaults dealloc synchronize

我从对象的 init 方法中的 NSUserDefaults 加载。 我可以在对象的 dealloc 方法中保存到 NSUserDefaults 吗?

完全类似于:

-(void)dealloc {
    NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
    [userDefaults setObject:self.filenamesArray forKey:self.defaultsKey];
    [userDefaults synchronize];
    self.filenamesArray = nil;
    self.defaultsKey = nil;
    [super dealloc];
}

好,坏,好吗?如果不好,哪里会更好。

编辑:

感谢您的详细回复。所有这些都是有道理的。我发现这里不适合保存到用户默认值的另一个原因是,只有当对象很好地释放时才会调用 dealloc。如果我的应用程序被终止,此代码将永远不会运行。同样,如果应用程序被插入后台(iOS 4),则不会运行。 我还删除了显式的 [userDefaults Synchronize] 调用。这让我有点紧张,但我把我对苹果的信任放在了这一点上。 :)

最佳答案

这很糟糕,因为当调用 -dealloc 时,其他对象已经放弃了对它的兴趣。这可能会产生许多不同的影响。

设置用户默认值的更好位置是设置更改的那一刻。这样它就会立即被持久化,并且应用程序可以被终止,而不必担心设置不会被持久化,因为对象图的一部分可能已经消失了。

关于iphone - 在 -(void)dealloc 中同步 NSUserDefaults 是一种不好的形式吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4175134/

相关文章:

objective-c - 为什么 stringForKey 返回 null?

ios - 应用程序仍在运行时调用 UITableViewDelegate dealloc 方法

objective-c - 在 dealloc 中使用 self.property = nil 有什么问题吗?

iphone - 更改 Nib 时不会调用 Dealloc

iphone - 语音到 iPhone 的文本 API?

objective-c - NSUserDefaults 无法保存和读取我的自定义对象

ios - UITableView Cell 无法正确保存数据?

ios - EXC_BAD_ACCESS KERN_INVALID_ADDRESS for WKWebView dealloc

iphone - 使用 UIProgressView 倒计时期间的事件处理

iphone - 当页面加载时,如何使 UIWebView 看起来与移动 safari 完全一样? (不是 super 放大)