一,NSNotification 通知一般分三步完成
首先 注册通知
,1注册通知[NSNotificationCenter defaultCenter ] addObserver :self
aelector:@selector(stop: ) name:@"cccc"object
:nil
];
addObserver: 观察者,即在什么地方接收通知;
selector: 收到通知后调用何种方法,后面可带参数,也就是可以用通知传值;
name: 通知的名字,也是通知的唯一标示,编译器就通过这个找到通知的。
2发送通知[NSNotificationCenterdefaultCenter] postNotificationName:@”cccc”object,sss];
第一个参数 通知的名字,也是通知的唯一标识,编译器就是通过这个找到通知的
第二个参数 通知传的值
3 执行通知的方法,当然也可以获得通知所传得值.
- (void)stop(NSNotification*)aNSNotification
- {
- id object = [aNSNotification object];
- }
附,通知一般全局调用,在页面间传值.
二 KVO
//KVO键值观察,作用提供了一种监控属性值改变,设计模式(观察者模式)
Book * myBook = [[Book alloc] init];
//第一个参数是观察者,他需要重写观察方法
//第二个参数:被观察者的路径
//第三个参数:
//NSKeyValueObservingOptionNew当修改属性值的时候,调用观察方法.
//NSKeyValueObservingOptionOld,当属性值被修改前,调用观察方法;
//NSKeyValueObservingOptionInitial 当属性被第一次赋值,调用观察方法;
//NSKeyValueObservingOptionPrior ,提供布尔值,来区别修改前和修改后
//第四个参数,内容参数(一般用作区别不同对象);
[myBook addObserver:self forKeyPath:@"name" options: NSKeyValueObservingOptionPrior context:"123"];
myBook.name = @"ios";//属性初始化
//项目盲点(添加观察者一定要记得释放)
[myBook removeObserver:self forKeyPath:@"name"];
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
{
// NSLog(@"keyPath:%@",keyPath);
// NSLog(@"object:%@",object);
NSLog(@"change:%@",change);
// NSLog(@"context:%@",context);
//change中的notificationIsPrior:代表修改前和修改后
if ([[change valueForKey:@"notificationIsPrior"] boolValue])
{
NSLog(@"修改前");
NSLog(@"old:%@",[change valueForKey:@"old"]);
}
else
{
NSLog(@"修改后");
NSLog(@"old:%@",[change valueForKey:@"old"]);
NSLog(@"new:%@",[change valueForKey:@"new"]);
}
}
//KVC :key-value coding (键值编码);ios中的一种设计模式和设计原理.作用是提供了一种见解访问属性的方法.
// 直接访问
个人感觉KVC就是一种打酱油的模式,