UserDefault和Notification

一、用户偏好设置

UserDefault的本意其实就是用户的偏好设置,他存储到路径在Home/Library/Preferences当中的扩展名为。plist的文件中。那么cocoa是通过NSUserDefaults对象实现用户偏好设置的。

基本的流程是,应用程序首先会注册一个用户偏好,然后可以读或者设定用户偏好,这些其实是通过NSUserDefaults的消息实现的。

其实每个程序运行的时候,都会有一个共享的defaults,叫做standardUserDefaults。

那么注册defaulsts,是使用NSDictionary对象或者NSMutableDictionary实现的。方法为registreDefaults

用户偏好的命名其实使用的就是UTI,统一标示符。

NSUserDefaultsController,在binding界面选择,目的是为了实现特定偏好的绑定功能。

命令行,通过defaults read *。plist,实现命令行的用户偏好读取。


二,Notification

为什么会有notification,就是当已经运行的程序,在运行的过程中,需要就行改变时,一个比较好的方式是将改变通知给相关的子窗口。

通知的基本过程是,首先一个对象向notificationcenter注册,成为一个特定notifcation消息的观察者,然后其他的对象会向notificationcenter发送notification,当notification center发现了这个notification的观察者之后,notificationcenter会发送消息给observer。

另外需要注意的是notification 的实现机制,只能够在进程内部实现,不能够跨进程实现。


cocoa实现方法是通过NSNotification 和NSNotificationCenter实现的。


NSNotification,其实是一个比较简单的对象,他包含了通知名称和发送该通知的对象。

每个程序在运行的时候,都有一个NSNotificationCenter对象在后台运行。

NSNotificationCenter的重要方法:

-(void)addOberver:(id)anObserver  selector:(SEL)aSelector name:(NSString*)notificationName object:(id)anObject

注册观察者,对notificationName感兴趣,然后调用aSelector去做动作进行执行。

-(void)postNotification:(NSNotification*)notification

发送notification向notification center。

-(void) postNotificationName:(NSString*)name  object:(id)object userInfo:d

         创建并发送一个notification。

        - (void)removeObserver:(id)observer

删除一个观察者

UserInfo字典,可以通过notification传递更多的信息。

补充delegate和notification的关系。

其实对于一些cocoa自带的对象,也是带有预定义的notification消息的。比如NSWindow。那么对于向这些标准对象注册的delegate,有时候也想成为可以接收notification的对象,此时只需要实现notification的方法就可以了。

比如NSWindowDidResizeNotification消息,他的notification的委托实现方法为:

-(void)windowDidResize:(NSNotification*) Notification

这就是一个标准的逻辑,去掉NS,并小写第一个字母,然后去掉Notification就可以实现委托接收通知。


你可能感兴趣的:(object,cocoa,存储,扩展,binding)