0

我目前有一个颜色井,可以跟踪保存在 NSUserDefaults 中的颜色。它绑定到一个 NSUserDefaultsController。但是,我也想听听颜色的变化,以便我可以相应地更新我的视图。因此,除了绑定之外,我还向我的首选项控制器添加了一个目标/动作到颜色以及发布带有颜色的通知。

1)同时拥有目标/动作和绑定有多安全?是否有可能会滞后或者它们可能不同步并报告不同的值?

2)当我在我的 IBAction 方法中获取颜色时,我应该从用户默认值还是从颜色中获取它?

这是我的 colorChanged: 操作:

- (IBAction)colorChanged:(id)sender
{
NSDictionary *userInfo = [NSDictionary dictionaryWithObject:[colorWell color] forKey:@"color"];
[notificationCenter postNotificationName:@"ColorChangedNotification" object:self userInfo:userInfo];
}

所以我应该这样做:

[NSKeyedUnarchiver unarchiveObjectWithData:[[NSUserDefaults standardUserDefaults] objectForKey:@"color"]];

或者:

[colorWell color];

谢谢!

4

2 回答 2

3

1)同时拥有目标/动作和绑定有多安全?是否有可能会滞后或者它们可能不同步并报告不同的值?

我认为在大多数情况下,它应该没问题。最好的判断方法是测试它。

2)当我在我的 IBAction 方法中获取颜色时,我应该从用户默认值还是从颜色中获取它?

绝对应该,绝对直接从颜色中得到它。为什么?保存到用户默认值时可能会有延迟。哎呀,默认值甚至可以在应用程序终止之前只保存一次,它仍然可以。(好吧,这并不完全正确,但仍然如此)默认值的主要目的是在应用程序启动之间保留数据,而不是在应用程序的生命周期内。

于 2010-02-06T05:26:34.400 回答
1

同时拥有目标/动作和绑定是安全的。如果您使用 NSNotificationCenter 发布通知,则通知将同步传递给观察者。(很明显它不是魔法——如果观察者 A 在收到通知时向观察者 B 发送消息,则观察者 B 还没有收到通知。多线程增加了进一步的复杂性。)这在NSNotificationCenter 的文档。

直接从颜色井中读取颜色很快,并且可能从 IBAction 中很好。如果您在应用程序启动时运行代码,最好从用户默认值中读取,因为颜色井的绑定可能尚未更新。

于 2010-02-06T01:54:51.013 回答