ios通知-kvo

// KVC: Key Value Coding, 常见作用:给模型属性赋值
    // KVO: Key Value Observing, 常用作用:监听模型属性值的改变

 1 //
 2 //  ViewController.m
 3 //  11-通知、KVO、代理
 4 //
 5 //  Created by xiaomage on 15/6/6.
 6 //  Copyright (c) 2015年 xiaomage. All rights reserved.
 7 //
 8
 9 #import "ViewController.h"
10 #import "XMGPerson.h"
11
12 @interface ViewController ()
13 @property (nonatomic, strong) XMGPerson *p1;
14 @property (nonatomic, strong) XMGPerson *p2;
15 @property (nonatomic, strong) XMGPerson *p3;
16 @end
17
18 @implementation ViewController
19
20 - (void)viewDidLoad {
21     [super viewDidLoad];
22
23 //    self.p1 = [[XMGPerson alloc] init];
24 //    self.p1.name = @"p1";
25 //
26 //    self.p2 = [[XMGPerson alloc] init];
27 //    self.p2.name = @"p2";
28 //
29 //    self.p3 = [[XMGPerson alloc] init];
30 //    self.p3.name = @"p3";
31 //    同一个通知TestNotification可以被多个对象person监听
32 // 当收到TestNotification通知就调用self.p1的test方法
33 //    [[NSNotificationCenter defaultCenter] addObserver:self.p1 selector:@selector(test) name:@"TestNotification" object:nil];
34 //    [[NSNotificationCenter defaultCenter] addObserver:self.p2 selector:@selector(test) name:@"TestNotification" object:nil];
35 //    [[NSNotificationCenter defaultCenter] addObserver:self.p3 selector:@selector(test) name:@"TestNotification" object:nil];
36 //    多个对象可以发出同一个通知
37 //对象@“123”发出TestNotification通知
38 //    [[NSNotificationCenter defaultCenter] postNotificationName:@"TestNotification" object:@"123"];
39 //    [[NSNotificationCenter defaultCenter] postNotificationName:@"TestNotification" object:@"345"];
40
41     // KVC: Key Value Coding, 常见作用:给模型属性赋值
42     // KVO: Key Value Observing, 常用作用:监听模型属性值的改变
43
44
45     self.p1 = [[XMGPerson alloc] init];
46     self.p1.name = @"p1";
47     //self.p1 监听属性 name的改变,NSKeyValueObservingOptionOld表示监听方法中的NSDictional显示旧值
48     [self.p1 addObserver:self forKeyPath:@"name" options: NSKeyValueObservingOptionOld context:nil];
49
50     self.p1.name = @"pppp1";
51 }
52 //所有的通知监听 都要在dealloc销毁时removeObserver
53 - (void)dealloc
54 {
55     [self.p1 removeObserver:self forKeyPath:@"name"];
56 }
57
58 #pragma mark - KVO监听方法
59 /**
60  * 当监听到object的keyPath属性发生了改变
61 *这个方法是NSObject的类扩展方法,用来监听对象属性改变
62 *keyPath属性名称如name
63 *id 对象 如self.p1
64 *change 记录改变前后的值
65  */
66 - (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
67 {
68     NSLog(@"监听到%@对象的%@属性发生了改变, %@", object, keyPath, change);
69 }
70
71 @end

时间: 2024-08-30 09:24:54

ios通知-kvo的相关文章

iOS开发-KVO的奥秘

iOS开发-KVO的奥秘 字数2933 阅读3842 评论28 喜欢57 序言 在iOS开发中,苹果提供了许多机制给我们进行回调.KVO(key-value-observing)是一种十分有趣的回调机制,在某个对象注册监听者后,在被监听的对象发生改变时,对象会发送一个通知给监听者,以便监听者执行回调操作.最常见的KVO运用是监听scrollView的contentOffset属性,来完成用户滚动时动态改变某些控件的属性实现效果,包括渐变导航栏.下拉刷新控件等效果. 渐变导航栏 使用 KVO的使用

iOS KVC/KVO总结

http://www.cnblogs.com/QM80/p/3647819.html 如果要修改对象的属性值 1.一般情况下是直接利用对象属性的set方法来修改: Student *stu = [[Student alloc] init]; // set方法的两种书写格式 [stu setAge:10]; stu.age = 10; 2.但是如果不知道对象类型呢?那么就可以运用KVC键值编码(Key Value Coding) 间接的修改对象属性 KVC实现方式是:使用字符串来描述对象需要修改的

iOS 通知观察者的被调函数不一定运行在主线程

Tony in iOS | 08/08/2013 iOS 通知观察者的被调函数不一定运行在主线程 今天修复Bug时候发现的一个小细节,记录下. 问题描述 事情是这样的:我在A视图(UITableView)注册了一个通知,当接收到此通知时,就重新读取数据并调用[tableView reloadData].但是视图有时刷新后的显示的内容不对,再重新切换下视图又正常了. 代码如下: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 //A视图在初始化时注册通知 - (voi

iOS的KVO使用和轻量级封装

KVO的用法 注册 [object addObserver:observer forKeyPath:@"text" options:NSKeyValueObservingOptionNew context:nil]; 实现回调方法 -(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context { if(

IOS通知机制初解

消通知机制: 3个步骤: 1.通知的发布 2.通知的监听 3.通知的移除 需要了解的要点 1.通知中心:(NSNotificationCenter) 每一个应用程序都有一个通知中心(NSNotificationCenter)实例,专门负责协助不同对象之间的消息通信 任何一个对象都可以向通知中心发布通知(NSNotification),描述自己在做什么.其他感兴趣的对象(Observer)可以申请在某个特定通知发布时(或在某个特定的对象发布通知时)收到这个通知 2.通知:(NSNotificati

ios通知使用 书上案例 简单易懂

/* The notification name */const NSString *ResultOfAppendingTwoStringsNotification =@"ResultOfAppendingTwoStringsNotification"; /* Keys inside the dictionary that our notification sends */const NSString*ResultOfAppendingTwoStringsFirstStringInfo

iOS 通知的使用

iOS 通知是经常用到的一个重要的知识点,总结记录一下. 1.向通知中心注册通知 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(TFChangedValue:) name:@"hello" object:nil]; 2.发送通知 - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRan

iOS核心笔记——iOS通知机制

1.iOS通知机制: 1-1.iOS通知发布者.通知中心.监听器之间的关系: 如下图所示: 2.通知(NSNotification)简介: 3.通知中心(NSNotificationCenter) 3-1.每个应用程序只有一个通知中心对象(单例对象): 4.发布通知: 4-1.对象在自己需要的某个时候使用通知类(NSNotification)创建通知对象后让通知中心帮忙发布通知: 1.可以在对象A需要使用通知的某个位置,直接让通知中心帮忙发送的时候将通知中的一系列信息通过通知中心提供的方法创建通

iOS 通知的变化ios9-10,新功能展示

一.变化 四.Notification(通知) 自从Notification被引入之后,苹果就不断的更新优化,但这些更新优化只是小打小闹,直至现在iOS 10开始真正的进行大改重构,这让开发者也体会到UserNotifications的易用,功能也变得非常强大. iOS 9 以前的通知 1.在调用方法时,有些方法让人很难区分,容易写错方法,这让开发者有时候很苦恼. 2.应用在运行时和非运行时捕获通知的路径还不一致. 3.应用在前台时,是无法直接显示远程通知,还需要进一步处理. 4.已经发出的通知