观察者 和 block的区别
来源:互联网 发布:卖鸽子的软件 编辑:程序博客网 时间:2024/06/06 15:38
通知中心
消息————注册观察者————监听有没有消息发出----------作出响应
步骤:
1. 注册观察者
2.发送消息
3.移除
KVO
使用方法:
1.
- (void)viewDidLoad {
[superviewDidLoad];
//注册观察者
[[NSNotificationCenterdefaultCenter]addObserver:selfselector:@selector(changeColor:)name:@"change"object:nil];
self.navigationItem.leftBarButtonItem= [[UIBarButtonItemalloc]initWithTitle:@"跳转"style:UIBarButtonItemStylePlaintarget:selfaction:@selector(skip:)];
//注册观察者
[[NSNotificationCenterdefaultCenter]addObserver:selfselector:@selector(changeColor:)name:@"change"object:nil];
self.navigationItem.leftBarButtonItem= [[UIBarButtonItemalloc]initWithTitle:@"跳转"style:UIBarButtonItemStylePlaintarget:selfaction:@selector(skip:)];
}
//改变背景颜色
- (void)changeColor:(NSNotification*)notify {
UIColor *color = [notifyobject];
self.view.backgroundColor= color;
// self.view.backgroundColor = notify.object;
- (void)changeColor:(NSNotification*)notify {
UIColor *color = [notifyobject];
self.view.backgroundColor= color;
// self.view.backgroundColor = notify.object;
}
2.
- (void)viewWillDisappear:(BOOL)animated {
UIColor*color = [UIColorcolorWithRed:arc4random() % 256/ 255.0 green:arc4random() %256 / 255.0blue:arc4random() % 256/ 255.0 alpha:1.0];
//发送消息
//发送消息
[[NSNotificationCenterdefaultCenter]postNotificationName:@"change"object:color];
}
3.
- (void)dealloc {
//3.移除观察者
[[NSNotificationCenterdefaultCenter]removeObserver:selfname:@"change"object:nil];
[superdealloc];
//3.移除观察者
[[NSNotificationCenterdefaultCenter]removeObserver:selfname:@"change"object:nil];
[superdealloc];
}
Block
.h
//返回值(名字)(将来要传的参数)
//1.重命名Block
typedefvoid(^passColor)(UIColor*color);
@interfaceSecondViewController : UIViewController
//2.创建一个Block对象
//copy:是因为刚开始并不执行,拷贝复制一份,放在一个地方,当需要的时候才会开始执行
@property(nonatomic,copy)passColorcolor;
//3.创建方法从外界传入一个Block
- (void)getBlockFromOutSpace:(passColor)color;
//1.重命名Block
typedefvoid(^passColor)(UIColor*color);
@interfaceSecondViewController : UIViewController
//2.创建一个Block对象
//copy:是因为刚开始并不执行,拷贝复制一份,放在一个地方,当需要的时候才会开始执行
@property(nonatomic,copy)passColorcolor;
//3.创建方法从外界传入一个Block
- (void)getBlockFromOutSpace:(passColor)color;
.m
- (void)getBlockFromOutSpace:(passColor)color {
//初始化Block对象
//遵循原则:谁创建,谁调用; 谁想用,谁负责实现
//初始化Block对象
//遵循原则:谁创建,谁调用; 谁想用,谁负责实现
self.color = color;
}
- (void)viewWillDisappear:(BOOL)animated {
UIColor *color = [UIColorcolorWithRed:arc4random() %256 / 255.0 green:arc4random() %256 / 255.0 blue:arc4random() %256 / 255.0 alpha:1.0];
if (self.color) {
//调用Block 函数名()实参
//调用Block 函数名()实参
self.color(color);
}
}
.m
__blockRootViewController*root = self;
//此时second对root就是弱引用,
//防止循环调用,导致的空间不能被释放掉,内存泄露,
[secondVCgetBlockFromOutSpace:^(UIColor *color) {
root.view.backgroundColor = color;
}];
0 0
- 观察者 和 block的区别
- block,inline和inline-block的区别
- block,inline和inlinke-block的区别
- block和inline的区别
- delegate 和 block 的区别
- block和inline的区别
- 协议和block的区别
- block,inline和inline-block的概念和区别
- block和代理的区别和联系
- display:block,inline和inline-block的区别
- display:block、inline和inline-block的区别
- display:block、inline和inline-block的区别(转载)
- block,inline,inline-block的概念和区别
- display:inline、block、inline-block和none的区别
- display:inline、display:block和display:inline-block的区别
- display中block、inline、inlinke-block的区别和使用方法
- display中inline-block和block的区别
- block和inline的区别是?
- 1030. Travel Plan
- source insight添加汇编文件并可索引
- 如何快速调用系统相机
- django 1.8 官方文档翻译: 13-9-1 如何使用会话
- js继承的概念
- 观察者 和 block的区别
- Ubuntu 14.04 下FTP服务器的搭建
- LeetCode之Missing Number
- 虚拟机调优工具
- 【网络流之最大流】POJ1459-Power Network【EK模板题】
- 【基础知识】C++指针知识
- 杜绝返回函数内局部变量的指针或引用
- VB6获取本机网络适配器信息(网卡名称、IP地址、子网掩码、默认网关等)
- 设置cell选中后一段时间颜色自动消失