代理、通知、KVO

  • 代理设计模式的作用:

    • 1.A对象监听B对象的一些行为,A成为B的代理
    • 2.B对象想告诉A对象一些事情,A成为B的代理
  • 代理设计模式的总结:
    • 如果你想监听别人的一些行为,那么你就要成为别人的代理
    • 如果你想告诉别人一些事情,那么就让别人成为你的代理
  • 代理设计模式的开发步骤
    • 1.拟一份协议(协议名字的格式:控件名 + Delegate),在协议里面声明一些代理方法(一般代理方法都是@optional)
    • 2.声明一个代理属性:@property (nonatomic, weak) id<代理协议> delegate;
    • 3.在内部发生某些行为时,调用代理对应的代理方法,通知代理内部发生什么事
    • 4.设置代理:xxx.delegate = yyy;
    • 5.yyy对象遵守协议,实现代理方法

通知

  • 通知中心发出通知

    // aa对象在通知中心发出了cc通知
    [[NSNotificationCenter defaultCenter] postNotificationName:@"cc" object:@"aa"];
    //bb对象监听了任何对象发出的cc通知,一旦有对象发出了cc通知,bb对象就会调用它的test方法
    [[NSNotificationCenter defaultCenter] addObserver:bb selector:@selector(test) name:@"cc" object:nil];

代理和通知的区别

  • 代理:1个对象只能告诉另1个对象发生了什么事
  • 通知:1个对象可以告诉N个对象发生了什么事

KVO

  • KVO(Key Value Observing)常用作用:监听模型属性值的改变
  • KVO的使用步骤
// cc监听了aa的name属性的改变
[aa addObserver:cc forKeyPath:@"name" options: NSKeyValueObservingOptionOld context:nil];

// cc得实现监听方法
/**
 * 当监听到object的keyPath属性发生了改变
 */
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
{
    NSLog(@"监听到%@对象的%@属性发生了改变, %@", object, keyPath, change);
}
注意:在对象销毁的时候要移除观察者
时间: 2024-10-10 04:26:29

代理、通知、KVO的相关文章

IOS开发——UI进阶篇(五)通知、代理、kvo的应用和对比,购物车

一.通知 1.通知中心(NSNotificationCenter)每一个应用程序都有一个通知中心(NSNotificationCenter)实例,专门负责协助不同对象之间的消息通信任何一个对象都可以向通知中心发布通知(NSNotification),描述自己在做什么.其他感兴趣的对象(Observer)可以申请在某个特定通知发布时(或在某个特定的对象发布通知时)收到这个通知 2.通知(NSNotification)一个完整的通知一般包含3个属性:- (NSString *)name; // 通知

iOS------通知、代理、kvo 详解

通知:通知中心实际上是在程序内部提供了消息广播的一种机制.通知中心不能在进程间进行通信.实际上就是一个二传手,把接收到的消息,根据内部的一个消息转发表,来将消息转发给需要的对象.通知中心是基于观察者模式的,它允许注册.删除观察者. 一个 NSNotificationCenter 可以有许多的通知消息 NSNotification, 对于每一个 NSNotification 可以有很多的观察者 Observer 来接收通知. 委托代理:委托代理(degegate),顾名思义,把某个对象要做的事情委

单例、代理 &amp; 通知

PS:手写单例.代理方法实现 & 通知的简单使用! [ 单例模式,代理设计模式,观察者模式! ] 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了可重用代码.让代码更容易被他人理解.保证代码可靠性. -- GoF “四人帮”<Design Patterns: Elements of Reusable Object-Oriented Software>将设计模式提升到理论高度,并将之规范化.该书提出了23种基本

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 "Vie

Block实现代理/通知效果

例子1:A控制器->跳转—>B控制器 , 假设想从B控制器回传数组给A控制器 实现:B控制器.h文件定义一个block参数,.m文件执行block,A控制器设置block内容 B.h文件//创建block块 @property(nonatomic,copy) void (^Block)(NSArray *array); B.m文件 //执行block块!self.Block? (此处为空格):Blcok(array); //判断是否存在Block,存在则执行Block,并且将数组array传递

ios开发-UI基础-应用管理(单纯界面)改进5-使用代理实现监听下载按钮的点击(delegate)

[注意]转载时请注明出处博客园-吃唐僧肉的小悟空http://www.cnblogs.com/hukezhu/ 前几篇文章介绍了一个应用管理的小应用,从最开始的单纯实现功能,一步一步就行改进\封装,上篇文章是使用xib进行了优化,本篇文章使用代理实现监听下载按钮的点击. 在原来的基础上,使用代理的主要思路分析: 首先要新建一个协议 声明协议的要实现的方法(一般为optional) 声明一个遵守该协议的代理的属性 使用代理,通知其代理完成操作 在代理中的实现步骤: 遵守协议 设置代理(一般通过拖线

KVO与KVO的关系

技术笔记 这两个机制的目的都是为了 解耦合 ,它们时联系和相互独立的.这样说似乎有些说不通.我们具体看一看 它们是 (联系) 还是 (独立) 取决于我们要达到的目的: 目的一: 场景介绍:紧密联系 我们的银行账户有变动的时候,银行会给我们发短信通知,这时候就是我们账户先被改变了,然后我们得到了通知. 这就好比我们的KVO的工作机制: 我们在柜台上签了一份协议书,表示我们同意账户的改变的时候通知我(注册KVO) 账户改变我们得到通知(KVO回调) 这个时候改变账户的行为必须是KVC的setValu

IOS第二天-新浪微博 - 添加搜索框,弹出下拉菜单 ,代理的使用 ,HWTabBar.h(自定义TabBar)

********HWDiscoverViewController.m(发现) - (void)viewDidLoad { [super viewDidLoad]; // 创建搜索框对象 HWSearchBar *searchBar = [HWSearchBar searchBar]; searchBar.width = 300; searchBar.height = 30; self.navigationItem.titleView = searchBar; //设置titleView 是搜索框

iOS KVC 和 KVO 的学习

KVC  (NSKey Value Coding) :键值编码 KVO (Key Value Observing) :键值监听 我曾经用过 监听 一个音频何时结束 监听视频播放 状态等 用了这种方法 今天特地总结一下KVC 和 KVO.以方便以后深入学习与运用. 再而有了全新认识,再做更专业的总结. KVC :  一个非正式的Protocol,提供一种机制来间接访问对象的属性.而不是通过调用Setter.Getter方法访问. 简单的说,KVC 可以不进行任何操作 就可以进行对象属性的动态读写.

Runloop 新的看法

1.Runloop --运行循环 Runloop能做的事情: 1.让程序一直运行 2.处理触摸事件:(UI交互,闹钟,网络等等) 3.处理渲染事件:(每一次渲染的时候,重新加载所有的屏幕上的点) NSTimer *timer = [NSTimer timerWithTimeInterval:1.0f target:self selector:@selector(updateTimer) userInfo:nil repeats:YES]; // NSDefaultRunLoopMode;  一般