ios - block数据的回调
- 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数据的回调的更多相关文章
- iOS block从零开始
iOS block从零开始 在iOS4.0之后,block横空出世,它本身封装了一段代码并将这段代码当做变量,通过block()的方式进行回调. block的结构 先来一段简单的代码看看: void ...
- 友盟iOS微信登陆没有回调的原因
1.在友盟文档中这样说: 链接 7.4 微信登录 添加配置文件参考文档:添加微信及朋友圈,添加相关库文件,配置URL schemes及添加系统回调 注意微信登录必须先在微信开放平台申请微信登录权限 在 ...
- iOS block和代理的区别
block和代理是iOS开发中实现回调的两种方式,大多数情况下是用哪个都可以,主要看个人喜好.本文主要是对两者做一下对比. 1.block简介 在 iOS中, block一共分三种. (1 ...
- (译)IOS block编程指南 1 介绍
Introduction(介绍) Block objects are a C-level syntactic and runtime feature. They are similar to stan ...
- iOS本地数据存储(转载)
看到一篇不错的文章,推荐给大家!!! 应用沙盒 1)每个iOS应用都有自己的应用沙盒(应用沙盒就是文件系统目录),与其他文件系统隔离.应用必须待在自己的沙盒里,其他应用不能访问该沙盒 2)应用沙盒的文 ...
- iOS本地数据存取
应用沙盒 1)每个iOS应用都有自己的应用沙盒(应用沙盒就是文件系统目录),与其他文件系统隔离.应用必须待在自己的沙盒里,其他应用不能访问该沙盒 2)应用沙盒的文件系统目录,如下图所示(假设应用的名称 ...
- iOS基础 - 数据存取
一.iOS应用数据存储的常用方式 XML属性列表(plist)归档 Preference(偏好设置) NSKeyedArchiver归档 SQLite3 Core Data 二.应用沙盒 每个iOS应 ...
- iOS block 机制
本文要将block的以下机制,并配合具体代码详细描述: block 与 外部变量 block 的存储域:栈块.堆块.全局块 定义 块与函数类似,只不过是直接定义在另一个函数里,和定义它的那个函数共享同 ...
- iOS本地数据存取,看这里就够了
本文授权转载,作者:hosea_zhou(简书) 应用沙盒 1)每个iOS应用都有自己的应用沙盒(应用沙盒就是文件系统目录),与其他文件系统隔离.应用必须待在自己的沙盒里,其他应用不能访问该沙盒 2) ...
随机推荐
- Codeforces Round #244 (Div. 2) B. Prison Transfer
题目是选出c个连续的囚犯,而且囚犯的级别不能大于t #include <iostream> using namespace std; int main(){ int n,t,c; cin ...
- 【BZOJ】1367: [Baltic2004]sequence
题意 给\(n(n \le 10^6)\)个数的序列\(a\),求一个递增序列\(b\)使得\(\sum_{i=1}^{n} |a_i-b_i|\)最小. 分析 神题啊不会. 具体证明看黄源河论文&l ...
- CF 22B. Bargaining Table
水题.好久没有写过优化搜索题了. #include <cstdio> #include <cstring> #include <iostream> #include ...
- CF 335B. Palindrome(DP)
题目链接 挺好玩的一个题,1Y... #include <cstdio> #include <cstring> #include <iostream> using ...
- Excel中COUNTIFS函数统计词频个数出现次数
Excel中COUNTIFS函数统计词频个数出现次数 在Excel中经常需要实现如下需求:在某一列单元格中有不同的词语,有些词语相同,有的不同(如图1所示).需要统计Excel表格中每个词语出现的 ...
- ssh免密登录
背景:搭建Hadoop环境需要设置无密码登陆,所谓无密码登陆其实是指通过证书认证的方式登陆,使用一种被称为"公私钥"认证的方式来进行ssh登录. 在linux系统中,ssh是远程登 ...
- 使用shell操作mysql(转)
在linux平台下,为避免每次操作数据库(mysql)都要进入Mysql命令模式下,可以使用Shell命令直接操作数据库. 一.直接写sql语句 if [ $# -ne 1 ] then ...
- JQuery插件让图片旋转任意角度且代码极其简单
引入下方的jquery.rotate.js文件,然后通过$("选择器").rotate(角度);可以旋转任意角度, 例如$("#rotate-image").r ...
- Search Ads 已经在美国区上线 - iOS 移动开发周报(46)
Search Ads 已经在美国区上线 - iOS 移动开发周报(46) 新闻 Search Ads 上线 苹果的 AppStore 搜索广告终于 正式上线了 https://developer.ap ...
- Maya 建模完成后的整理
我们在使用Maya建模完成后可能会进行发布,为了自己或他人的方便使用,我们需要对建立好的模型进行些处理: 1. 删除历史记录:选择模型,Edit -> Delete by Type -> ...