我从对象的 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/