认识下三种IOS常见的回调模式。

代理模式作为IOS中最常见的通讯模式,代理几乎无处不在。

这里有一个数组,我们首先通过代理的方式将数组传递到其他方法中去。

设置协议及方法

  1. @protocol CallBackDelegate;
  2. @interface ViewController : UIViewController
  3. @property (weak, nonatomic) id<CallBackDelegate> delegate;
  4. @end
  5. @protocol CallBackDelegate <NSObject>
  6. - (void)showArrayWithDelegate:(NSArray *)array;
  7. @end

@interface ViewController () <CallBackDelegate>

点击按钮传递数组让其显示

  1. - (IBAction)delegateCallBack
  2. {
  3. NSDictionary *dict = @{@"array": @[@"Chelsea", @"MUFC", @"Real Madrid"]};
  4. NSArray *array = dict[@"array"];
  5. [self.delegate showArrayWithDelegate:array];
  6. }

调用,显示

  1. - (void)showArrayWithDelegate:(NSArray *)array
  2. {
  3. _outputLabel.text = array[2];
  4. }

最重要也是最容易忽略的,就是一定要设置delegate的指向。
完成后屏幕显示

使用通知中心
通知中心的方式可以不用设置代理,但是需要设置观察者和移除观察者。

代码

  1. - (IBAction)callBack
  2. {
  3. NSDictionary *dict = @{@"array": @[@"Chelsea", @"MUFC", @"Real Madrid"]};
  4. NSArray *array = dict[@"array"];
  5. [[NSNotificationCenter defaultCenter] postNotificationName:@"OutputArrayNotification" object:array];
  6. }

注册和移出观察者

  1. - (void)viewWillAppear:(BOOL)animated
  2. {
  3. [super viewWillAppear:animated];
  4. [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(outputWithNote:) name:@"OutputArrayNotification" object:nil];
  5. }
  6. - (void)viewDidDisappear:(BOOL)animated
  7. {
  8. [super viewDidDisappear:animated];
  9. [[NSNotificationCenter defaultCenter] removeObserver:self name:@"OutputArrayNotification" object:nil];
  10. }

显示

  1. - (void)outputWithNote:(NSNotification *)aNotification
  2. {
  3. NSArray *receiveArray = [aNotification object];
  4. _outputLabel.text = receiveArray[0];
  5. }

Block
什么是Block:从C的声明符到Objective-C的Blocks语法
块代码以闭包得形式将各种内容进行传递,可以是代码,可以是数组无所不能。块代码十分方便将不同地方的代码集中统一,使其易读性增强。

来看这里怎么进行数组传递。

typedef void (^Arr_Block)(NSArray *array);

  1. - (void)showArrayUsingBlock:(Arr_Block)block
  2. {
  3. NSDictionary *dict = @{@"array": @[@"Chelsea", @"MUFC", @"Real Madrid"]};
  4. NSArray *array = dict[@"array"];
  5. block(array);
  6. }

调用方法,显示

  1. - (IBAction)blockCallBack
  2. {
  3. [self showArrayUsingBlock:^(NSArray *array) {
  4. _outputLabel.text = array[1];
  5. }];
  6. }

>

IOS常见的三种回调方法介绍的更多相关文章

  1. iOS常见的几种加密方法(base64.MD5.Token传值.系统指纹验证。。加密)

    普通加密方法是讲密码进行加密后保存到用户偏好设置中 钥匙串是以明文形式保存,但是不知道存放的具体位置 一. base64加密 base64 编码是现代密码学的基础 基本原理: 原本是 8个bit 一组 ...

  2. iOS中 三种随机数方法详解

    ios 有如下三种随机数方法: //第一种 srand((unsigned)time(0)); //不加这句每次产生的随机数不变 int i = rand() % 5; //第二种 srandom(t ...

  3. IOS开发之自定义Button(集成三种回调模式)

    前面在做东西的时候都用到了storyboard,在今天的代码中就纯手写代码自己用封装个Button.这个Button继承于UIView类,在封装的时候用上啦OC中的三种回调模式:目标动作回调,委托回调 ...

  4. iOS_Swift初识之使用三种回调方式自定义Button

    最近在学习Swift ,发现青玉伏案大神早期用OC写的一篇博客--IOS开发之自定义Button(集成三种回调模式)  很适合用来熟悉Swift的回调方式,于是我就用Swift翻版了一下,具体实现原理 ...

  5. 常见的三种Web服务架构

    常见的三种Web服务架构 转自http://www.cnblogs.com/bvbook/archive/2008/12/24/1360942.html 相互竞争的服务架构 The Competing ...

  6. RFID标签天线的三种制作方法

    在RFID标签中,天线层是主要的功能层,其目标是传输最大的能量进出标签芯片.RFID天线是按照射频识别所要求的功能而设计的电子线路,将导电银浆或导电碳浆网印在PVC.PC或PET上,再与面层.保护层和 ...

  7. [转]Apache HTTP Server 与 Tomcat 的三种连接方式介绍

    首先我们先介绍一下为什么要让 Apache 与 Tomcat 之间进行连接.事实上 Tomcat 本身已经提供了 HTTP 服务,该服务默认的端口是 8080,装好 tomcat 后通过 8080 端 ...

  8. spring与mybatis三种整合方法

    spring与mybatis三种整合方法 本文主要介绍Spring与Mybatis三种常用整合方法,需要的整合架包是mybatis-spring.jar,可通过链接 http://code.googl ...

  9. iOS开发UI篇—iOS开发中三种简单的动画设置

    iOS开发UI篇—iOS开发中三种简单的动画设置 [在ios开发中,动画是廉价的] 一.首尾式动画 代码示例: // beginAnimations表示此后的代码要“参与到”动画中 [UIView b ...

随机推荐

  1. 【log4j2 加载配置文件】 加载配置文件的三种方法

    log4j 2读取的配置文件可以分为三类:src下的配置文件.绝对路径的配置文件.相对路径的配置文件. package com.herman.test; import java.io.File; im ...

  2. Hark的数据结构与算法练习之若领图排序ProxymapSort

    算法说明 若领图排序是分布排序的一种. 个人理解,若领图排序算是桶排序+计数排序的变异版,桶排序计数排序理解了,那么若领图排序理解起来就会比较容易.区别其实就是存储中间值的方式做了调整…… 话说,这个 ...

  3. Python实践:模块自动重载

    一.概述 二.思路 三.实现 四.测试 1.开启自动重载(终端1) 2.修改模块(终端2) 3.查看实时输出(终端1) 五.参考源码 一.概述 开发Web程序时,通常会采用本地服务器进行调试,但如果代 ...

  4. "回复 集赞" 抢 《Apple Watch 苹果开发教程》活动开始了!!!

    "回复 集赞" 抢 <Apple Watch 苹果开发教程>活动开始了!!!   活动方式: 回复积赞 第1步:回复该帖   扫描二维码进入活动现场 第2步:召集你的小 ...

  5. Linux基础命令(1)

    使用Ctr + Alt + F1(2,3,4,5,6)进入终端. 使用Ctr + Alt + F7回到界面. date 显示系统日期 cal 2015 显示2015年的日历表 reboot 重启 sh ...

  6. LightOJ1119 Pimp My Ride(状压DP)

    dp[S]表示已经完成的工作集合 枚举从哪儿转移过来的,再通过枚举计算花费..水水的.. #include<cstdio> #include<cstring> #include ...

  7. storm环境搭建(前言)—— 翻译 Setting Up a Development Environment

    Setting Up a Development Environment 搭建storm开发环境所需步骤: Download a Storm release , unpack it, and put ...

  8. TYVJ 1011 NOIP 2008&&NOIP 2000 传纸条&&方格取数 Label:多线程dp

    做题记录:2016-08-15 15:47:07 背景 NOIP2008复赛提高组第三题 描述 小渊和小轩是好朋友也是同班同学,他们在一起总有谈不完的话题.一次素质拓展活动中,班上同学安排做成一个m行 ...

  9. COJ500 杨老师的路径规划(MST) (我是认真的)

    用LCT来维护生成树,动态加边(s,t,w)时,新建节点x,权值为边权w. 1.若s与t不连通,则连接s-x,x-t,答案+w 2.若s与t连通,找出s-t路径上的最大权w2,若w<w2,删除w ...

  10. JS中Date对象getYear()方法和getFullYear()方法区别

    释义 JavaScript getFullYear() 方法 getFullYear() 方法可返回一个表示年份的 4 位数字. getYear() 语法 dateObject.getFullYear ...