zoukankan      html  css  js  c++  java
  • 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
    View Code
  • 相关阅读:
    linux signal 处理
    AssetManager asset的使用
    分治法-汉诺塔问题
    WebSocket初探
    分治策略结合递归思想求最大子序列和
    数据库索引的作用和长处缺点
    Android Service 服务(一)—— Service
    YouTube为什么打不开?以及简便的訪问的方法/解决方式!
    winzip15.0注冊码
    CodeForces 398B 概率DP 记忆化搜索
  • 原文地址:https://www.cnblogs.com/jiaozi-li/p/5666524.html
Copyright © 2011-2022 走看看