苹果公司正在大力推广Block块语法的使用,据说Block会迟早取代一般协议代理的使用.

  Block最大的作用是函数回调,简化代码.

  在ios中,将blocks当成对象来处理,它封装了一段代码,这段代码可以在任何时候执行。Blocks可以作为函数参数或者函数的返回值,而其本身又可以带输入参数或返回值。它和传统的函数指针很类似,但是有区别:blocks是inline的,并且它对局部变量是只读的。

block官方定义:

示例的详解如下: 

 

  注意block可以使用其定义范围内的变量.

  如果你把block声明为一个变量,你可以把它当一个函数(function,本文中特指C语言形式的函数)一样调用:

block定义:

  int (^myBlock) (int a,int b) = ^(int a,int b){

    return a+b;

   };

   如果要修改就要加关键字:__block   双下划线哦!!!

  简单的回调,废话不多说,直接上代码!!!  第二个页面往第一个页面回调

  先在第二个页面定义一个块,然后写一个方法使用block;

  #import<UIKit/UIKit.h>

  typedefvoid(^myBlock)(NSString*,NSString*,NSInteger);

  @interfaceSecondViewController:UIViewController

  {

     myBlockblock;

  }

  -(void)passValueUsingBlock:(myBlock)block1;

  @end

  .m文件

  #import"SecondViewController.h"

  @interfaceSecondViewController()

  -(IBAction)Back:(id)sender;

  @end

  @implementationSecondViewController

  -(void)passValueUsingBlock:(myBlock)block1

  {

   block=block1;

  }

  -(void)viewDidLoad

  {

     [superviewDidLoad];

  }

  -(IBAction)Back:(id)sender{

     block(@"hello",@"女",21);

     [selfdismissViewControllerAnimated:YEScompletion:nil];

  }

  @end

  在第一个页面调用这个方法

  

#import"RootViewController.h"

#import"SecondViewController.h"

@interfaceRootViewController()

@property(weak,nonatomic)IBOutletUITextField*name;

@property(weak,nonatomic)IBOutletUITextField*sex;

@property(weak,nonatomic)IBOutletUITextField*age;

-(IBAction)Push:(id)sender;

@end

@implementationRootViewController

-(void)viewDidLoad

{

[superviewDidLoad];

//Doanyadditionalsetupafterloadingtheviewfromitsnib.

}

-(IBAction)Push:(id)sender{

SecondViewController*second=[[SecondViewControlleralloc]init];

[secondpassValueUsingBlock:^(NSString*name,NSString*sex,NSIntegerage){

self.name.text=name;

self.sex.text=sex;

self.age.text=[NSStringstringWithFormat:@"%d",age];

}];

[selfpresentViewController:secondanimated:YEScompletion:nil];

}

@end

  

IOS开发 Block的学习的更多相关文章

  1. iOS开发--Block

    iOS开发--Block 1.什么是Block,block 的作用 ui开发和网络常见功能实现回调,按钮的事件处理方法是回调方法以及网络下载后的回调处理 (1)按钮 target-action   一 ...

  2. iOS开发——Block详解

    iOS开发--Block详解 1. Block是什么 代码块 匿名函数 闭包--能够读取其他函数内部变量的函数 函数变量 实现基于指针和函数指针 实现回调的机制 Block是一个非常有特色的语法,它可 ...

  3. ios开发 block语句块

    ios开发 block语句块 1.block 理解为匿名函数 2.block变量的定义 //定义block变量,^表示定义block //技巧:函数名左右加括号,在函数名前面在加^ void (^bl ...

  4. IOS开发-OC学习-常用功能代码片段整理

    IOS开发-OC学习-常用功能代码片段整理 IOS开发中会频繁用到一些代码段,用来实现一些固定的功能.比如在文本框中输入完后要让键盘收回,这个需要用一个简单的让文本框失去第一响应者的身份来完成.或者是 ...

  5. IOS开发-UI学习-sqlite数据库的操作

    IOS开发-UI学习-sqlite数据库的操作 sqlite是一个轻量级的数据库,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了,而且它的处理速度比Mysql.PostgreSQL这 ...

  6. IOS开发-UI学习-delegate(代理)的使用,键盘消失

    代理是IOS开发中用到的一种设计模式.今天做了一个代理的小练习: 以下项目实现了两个页面之间的相互切换,并且在切换页面的时候完成了从一个页面往另一个页面的传值.从主页面往其他页面传值是容易的,但是反过 ...

  7. IOS开发-OC学习-MD5加密

    MD5的全称是Message-Digest Algorithm 5. MD5加密算法为现在应用最广泛的哈希算法之一,该算法广泛应用于互联网网站的用户文件加密,能够将用户密码加密为128位的长整数.数据 ...

  8. iOS开发-Block回调

    关于Block之前有一篇文章已经写过一篇文章Object-C-代码块Block回顾,不过写的比较浅显,不能体现出Block在实际开发中的重要性,关于Block的基础知识,可以参考之前的博客.在实际开发 ...

  9. iOS开发Block的使用

    Block 是从 iOS4引入的,在日常开发中,会经常用到Block.特别是在多线程中,Block的用处更广泛.而且,Block不仅可以接收参数,其本身也可以作为参数,因此,Block的功能非常强大. ...

随机推荐

  1. Wikidata和SparQL简介

    知识库 数据库(Database)和SQL,相信我们大部分人都非常非常熟悉.但是“知识库”可能知道的人就要相对少一些. 知识库是一个相对比较新的概念,它其实是一堆“三元组”(类似于主-谓-宾)的组合, ...

  2. 进程池_Pool

    当需要创建子进程数量不多的时候,可以直接利用multiprocessing中的Process动态生成多个进程 但是如果是成百甚至上千个任务,手动地创建它的工作量很大,此时就可以利用到multiproc ...

  3. #PHP#微信支付 第二篇 JSAPI 调用统一下单接口获取预支付交易数据

    上一篇讲到成功获取 openid,本篇要调用微信统一接口创建预支付交易单,并获取到相关数据,以便(后边)在微信内调起H5支付 第三步,调用微信统一下单接口创建预支付交易单 微信统一下单API是微信支付 ...

  4. jxcel - 好用的Excel与Java对象转换工具

    更多精彩博文,欢迎访问我的个人博客 Jxcel简介 Jxcel是一个支持Java对象与Excel(目前仅xlsx.xls)互相转换的工具包. 项目地址:https://github.com/jptan ...

  5. unnamed not found for the web module

    intellij idea tomcat 启动报错not found for the web module 使用intellij idea 创建tomcat项目的时候会出现该错误: 启动tomcat的 ...

  6. Python Syntax Summary

    # _*_ coding: utf-8 _*_ """########################################################## ...

  7. PHP19 PHPStorm2018和GitHub的使用

    目的 使用GitHub的代码仓库进行项目代码托管. 准备工作 1.在GitHub注册账号 https://github.com/ 2.Start a Project 登陆后创建一个项目 3.创建版本仓 ...

  8. ASP.NetCore 错误 NU1605 检测到包降级: Microsoft.Data.Sqlite 从 2.2.1 降级到 2.1.0

    找到使用的.csproj文件 将 <PackageReference Include="Microsoft.Data.Sqlite" Version="2.1.0& ...

  9. HDU-1297-Children’s Queue

    Children’s Queue 这道题是排序问题,可以用递归方法解决. 计算F(n): 一:当最后一个是男孩M时候,前面n-1个随便排出来,只要符合规则就可以,即是F(n-1): 二:当最后一个是女 ...

  10. mysql 数据库 show命令

    MySQL中有很多的基本命令,show命令也是其中之一,在很多使用者中对show命令的使用还容易产生混淆,本文汇集了show命令的众多用法. 1. show tables或show tables fr ...