• block在代理,kvo中传递数据效率最高

实现原理

控制器B想传递数据给控制器A.通过在B控制器中创建Block类型的类,创建方法,方法参数是刚才创建的block类型的变量.在方法实现的内部调用参数的block(@"你好");此时调用到了block则,block就会到写了blcok实现的地方去执行代码,也就是A控制器中,在A控制器中调用B控制器刚才创建的方法,由于方法的参数有block,则定义block内部要实现的代码,定以后,当A掉用B内部的方法,然后方法跳入B控制器去执行,当方法内部的block比调用的时候,由于实现在A控制器,则又会跳回来A控制器执行A中定义的block要实现的代码.具体看下面例子

//
// SecondViewController.h
// test
//
// Created by 裴波波 on 16/4/8.
// Copyright © 2016年 裴波波. All rights reserved.
// #import <UIKit/UIKit.h> //先定义一个有参数,参数类型为NSString * 类型,无返回值的block类型
typedef void(^Myblock)(NSString *);
@interface SecondViewController : UIViewController @property(nonatomic,copy) Myblock frstBlock; //定义方法参数是block
-(void)testANewBlock:(Myblock) block; @end
  • .m文件实现

//
// SecondViewController.m
// test
//
// Created by 裴波波 on 16/4/8.
// Copyright © 2016年 裴波波. All rights reserved.
// #import "SecondViewController.h" @interface SecondViewController () @property (weak, nonatomic) IBOutlet UILabel *lblName;
@end @implementation SecondViewController - (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view.
} -(void)testANewBlock:(Myblock)block{ //调用block,此时block的实现代码在哪里写的就会在哪里执行.此时blcok实现在ViewControlle中写的,执行时跳入A控制器,把参数@"裴波波" 传入到Viewcontroller控制器
block(@"裴波波");
} @end
  • viewcontroller控制器代码

//
// ViewController.m
// test
//
// Created by 裴波波 on 16/4/8.
// Copyright © 2016年 裴波波. All rights reserved.
// #import "ViewController.h"
#import "SecondViewController.h" @interface ViewController ()
@property (weak, nonatomic) IBOutlet UIButton *btn; @end @implementation ViewController -(void)viewDidLoad{ [super viewDidLoad];
} //点击按钮跳转控制器
- (IBAction)clickButton:(id)sender { SecondViewController * seVc = [SecondViewController new]; //调用secondVC方法,字定义secondVc中调用block的时候要执行的代码,在secoVc中调用block-----block在哪里就在那个控制器里面执行block,
[seVc testANewBlock:^(NSString * name) {
NSLog(@"peibobo---%@",name);
[_btn setTitle:name forState:UIControlStateNormal];
}];
} @end

小结: 谁要穿值谁就定义含有block的参数的方法,在方法内部调用blcok,将要传递的参数给了blcok,blcok跳进实现它要执行代码的'地方'执行代码.传值完成,如果涉及到三层以上的回调建议不要使用,因为这样会乱的.尤其是界面间的跳转,可以选择用通知.

ios - block数据的回调的更多相关文章

  1. iOS block从零开始

    iOS block从零开始 在iOS4.0之后,block横空出世,它本身封装了一段代码并将这段代码当做变量,通过block()的方式进行回调. block的结构 先来一段简单的代码看看: void ...

  2. 友盟iOS微信登陆没有回调的原因

    1.在友盟文档中这样说: 链接 7.4 微信登录 添加配置文件参考文档:添加微信及朋友圈,添加相关库文件,配置URL schemes及添加系统回调 注意微信登录必须先在微信开放平台申请微信登录权限 在 ...

  3. iOS block和代理的区别

      block和代理是iOS开发中实现回调的两种方式,大多数情况下是用哪个都可以,主要看个人喜好.本文主要是对两者做一下对比. 1.block简介   在 iOS中, block一共分三种.   (1 ...

  4. (译)IOS block编程指南 1 介绍

    Introduction(介绍) Block objects are a C-level syntactic and runtime feature. They are similar to stan ...

  5. iOS本地数据存储(转载)

    看到一篇不错的文章,推荐给大家!!! 应用沙盒 1)每个iOS应用都有自己的应用沙盒(应用沙盒就是文件系统目录),与其他文件系统隔离.应用必须待在自己的沙盒里,其他应用不能访问该沙盒 2)应用沙盒的文 ...

  6. iOS本地数据存取

    应用沙盒 1)每个iOS应用都有自己的应用沙盒(应用沙盒就是文件系统目录),与其他文件系统隔离.应用必须待在自己的沙盒里,其他应用不能访问该沙盒 2)应用沙盒的文件系统目录,如下图所示(假设应用的名称 ...

  7. iOS基础 - 数据存取

    一.iOS应用数据存储的常用方式 XML属性列表(plist)归档 Preference(偏好设置) NSKeyedArchiver归档 SQLite3 Core Data 二.应用沙盒 每个iOS应 ...

  8. iOS block 机制

    本文要将block的以下机制,并配合具体代码详细描述: block 与 外部变量 block 的存储域:栈块.堆块.全局块 定义 块与函数类似,只不过是直接定义在另一个函数里,和定义它的那个函数共享同 ...

  9. iOS本地数据存取,看这里就够了

    本文授权转载,作者:hosea_zhou(简书) 应用沙盒 1)每个iOS应用都有自己的应用沙盒(应用沙盒就是文件系统目录),与其他文件系统隔离.应用必须待在自己的沙盒里,其他应用不能访问该沙盒 2) ...

随机推荐

  1. BZOJ1082: [SCOI2005]栅栏 题解

    题目大意: 有一些木材,可以没有浪费地将一根木材分成几块木板(比如长度为10的木板可以切成长度为8和2的两块木板).现在你希望得到一些长度的木板,问通过分割木材最多能得到几块想要的木板. 思路: 首先 ...

  2. Leetcode Partition List

    Given a linked list and a value x, partition it such that all nodes less than x come before nodes gr ...

  3. 【POJ】1739 Tony's Tour

    http://poj.org/problem?id=1739 题意:n×m的棋盘,'#'是障碍,'.'是空白,求左下角走到右下角且走过所有空白格子的方案数.(n,m<=8) #include & ...

  4. Android -- 通知栏的使用

    1. 效果图

  5. zip ubuntu使用

    http://www.cnblogs.com/daizhuacai/p/3174885.html 安装: sudo apt-get install zip 解压: unzip -d path file ...

  6. Tomcat_启动多个tomcat时,会报StandardServer.await: Invalid command '' received错误

    解决方案如下:将tomcat下的server.xml文件中的端口有问题,修改规则按以下标准显示“http的端口修改为6000 to 6800之间,shutdown的端口修改为3000 to 3300之 ...

  7. MyBatis调用存储过程,含有返回结果集、return参数和output参数

    Ibatis是我们经常使用的O/R映射框架,mybats是ibatis被Google收购后重新命名的一个工程,当然也做了大量的升级.而调用存储过程也是一次额C/S架构模式下经常使用的手段,我们知道,i ...

  8. mvn生成runnablejar 的方法

    主要讲3点,生成runnable jar 方法1是生成一个目录 方法2是直接一个runnable的jar 方法3是关于包含spring工程的情况  方法2和3其实是一致的 1.生成runnable j ...

  9. django1.9 创建数据表

    1.在setting.py 中注册app: 2.编写models.py 文件创建表结构: (生成的表默认是: app名称_定义的表面  ) 3.执行命令: python manage.py check ...

  10. MVC VS2012 Code First 数据库迁移教程

    1.在“服务资源管理器”连接数据库 2.打开工具-Nuget程序包管理器“程序包管理器控制台” 3.控制台输入命令:PM> Enable-Migrations -StartUpProjectNa ...