一、用户偏好设置
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就可以实现委托接收通知。