我目前有一个颜色井,可以跟踪在NSUserDefaults中保存的颜色。它绑定到NSUserDefaultsController。但是,我也想听取颜色的变化,以便我可以相应地更新我的视图。因此,除了绑定之外,我还向我的首选控制器添加了一个目标/动作到颜色井,该控制器使用颜色发布通知。
1)同时具有目标/动作和绑定的安全性如何?是否存在可能滞后或者可能不同步并报告不同值的可能性?
2)当我在IBAction方法中获取颜色时,我应该从用户默认值还是从颜色井中获取颜色?
这是我的colorChanged:action:
- (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];
谢谢!
答案 0 :(得分:3)
1)两者的安全性如何 目标/行动和绑定?有没有 一个人可能会滞后或他们的可能性 可能不同步并报告 不同的价值观?
我认为在大多数情况下,应该没问题。最好的方法是测试它。
2)当我在IBAction方法中获取颜色时,我应该从用户默认值还是从颜色井中获取颜色?
你应该肯定,直接从颜色井中获取它。为什么?保存到用户默认值时可能会出现延迟。哎呀,默认设置甚至可以在应用程序终止之前只保存一次,它仍然可以正常运行。 (好吧,这不完全正确,但仍然如此)默认设置的主要目的是在应用程序启动之间保留数据,而不是在应用程序的生命周期内。
答案 1 :(得分:1)
同时具有目标/操作和绑定是安全的。如果使用NSNotificationCenter发布通知,则通知将同步传递给观察者。 (显而易见的警告,它不是魔术 - 如果观察者A在收到通知时向观察者B发送消息,观察者B将不会收到通知。多个线程会进一步增加复杂性。)这在{ {3}}
直接从颜色井中读取颜色很快,从IBAction可能很好。如果您在应用程序启动时运行代码,最好从用户默认值中读取,因为颜色井的绑定可能尚未更新。