1.定义Block

/* 回传void ,参数也是void 的block*/

void (^blockReturningVoidWithVoidArgument)( void );

/* 回传整数,两个参数分别是整数和字元型态的block*/

int   (^blockReturningIntWithIntAndCharArguments)( int , char );

/* 回传void ,含有10 个block 的阵列,每个block 都有一个型态为整数的参数*/

void (^arrayOfTenBlocksReturningVoidWinIntArgument[ 10 ])( int );

/* 定义对象方法使用block,block中需要传入一个NSString参数,返回void*/

- (void)testBlockWithParam:(void (^)(NSString *text))block;

声明block局部变量:
returnType (^blockName)(parameterTypes) = ^returnType(parameters) {...}; 
 
声明block属性:
@property (nonatomic, copy) returnType (^blockName)(parameterTypes); 
 
接收block作为一个方法参数:
- (void)aMethodThatTakesABlock:(returnType (^)(parameterTypes))blockName; 
 
在方法调用中将block作为一个参数传递:
[someObject someMethodThatTakesABlock: ^returnType (parameters) {...}]; 
 
定义一个block类型:
typedef returnType (^TypeName)(parameterTypes);
TypeName blockName = ^returnType(parameters) {...}; 

2.使用Block

- (void)testBlockWithParam:(void (^)(NSString *text))block{

    NSLog(@"start test");

    // 定义参数x,在testx中使用

    int x = ;

    int (^testx)(int) = ^(int num2){

        return x+num2;

    };

    NSLog(@"use x:%d",testx());

    // 使用__block标示符,定义一个可在block中修改值的参数y

    __block int y = ;

    int (^testy)(int) = ^(int num2){

        if (num2 > ) {

            y = ;

        }else{

            y = ;

        }

        return y+num2;

    };

    NSLog(@"when num2 > 10,sum = %d",testy());

    NSLog(@"when num2 <= 10,sum = %d",testy());

    [NSThreadsleepForTimeInterval:1.0f];

    block(@"success");

}

iOS block 用法的更多相关文章

  1. iOS Block 用法 (1)-once again

    Block简介: Block的实际行为和Function很像,最大的差别是在可以存取同一个Scope的变量值.Block实体形式如下: ^(传入参数列){行为主体}; Block实体开头是“^”,接着 ...

  2. ios Block详细用法

    ios Block详细用法 ios4.0系统已开始支持block,在编程过程中,blocks被Obj-C看成是对象,它封装了一段代码,这段代码可以在任何时候执行.Blocks可以作为函数参数或者函数的 ...

  3. iOS Block界面反向传值

    在上篇博客 <iOS Block简介> 中,侧重解析了 iOS Block的概念等,本文将侧重于它们在开发中的应用. Block是iOS4.0+ 和Mac OS X 10.6+ 引进的对C ...

  4. iOS block从零开始

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

  5. IOS NSInvocation用法简介

    IOS NSInvocation用法简介 2012-10-25 19:59 来源:博客园 作者:csj007523 字号:T|T [摘要]在 iOS中可以直接调用某个对象的消息方式有两种,其中一种就是 ...

  6. iOS block 机制

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

  7. iOS Block的本质(四)

    iOS Block的本质(四) 上一篇文章iOS Block的本质(三)中已经介绍过block变量的捕获,本文继续探寻block的本质. 1. block内修改变量的值 int main(int ar ...

  8. # iOS Block的本质(三)

    iOS Block的本质(三) 上一篇文章iOS Block的本质(二)中已经介绍过block变量的捕获,本文继续探寻block的本质. 1. block对对象变量的捕获,ARC 环境 block一般 ...

  9. iOS Block的本质(二)

    iOS Block的本质(二) 1. 介绍引入block本质 通过上一篇文章Block的本质(一)已经基本对block的底层结构有了基本的认识,block的底层就是__main_block_impl_ ...

随机推荐

  1. leetcode 49 Group Anagram

    lc49 Group Anagram 逻辑很简单,就是统计字母出现次数,然后将完全相同的字符串放入同一list 关键是怎么实现 统计的部分,可以通过将string排序,Arrays.sort(),或者 ...

  2. json-server 和mock.js生成大量json数据

    JSON-server和mock.jsmock文件夹下 db.json db.jsjson-sever使用 安装:npm install json-server -g/mock 目录下执行json-s ...

  3. error LNK2005:"private:__thiscall编译错误

    对于这种编译错误,网上给出了很多解决办法,大部分都是忽略特定库,或者改变多线程调试DLL,但是均没有效果. 这里记录下自己的解决方法,首先按照下图,取消从父级或项目默认设置继承,避免与其他库中的定义冲 ...

  4. CGLayer和CALayer区别

    CGLayer是一种很好的缓存常绘内容的方法.注意,不要与CALayer混淆.CALayer是Core Animation中更加强大.复杂的图层对象,而CGLayer是Core Graphics中优化 ...

  5. k8s 内部各个部件运转

    Master节点部署的都是kubernetes的核心模块APIServer提供资源操作的唯一入口,并且提供认证/授权/kubernets的访问控制可以通过kubectl和自己开发的客户端,通过http ...

  6. Dock镜像初探索

    一.安装CentOS版DockerCE 1.1 卸载旧的版本 yum remove docker \ docker-client \ docker-client-latest \ docker-com ...

  7. python学习笔记3_数据载入、存储及文件格式

    一.丛mysql数据库中读取数据 import pandas as pdimport pymysqlconn = pymysql.connect( host = '***', user = '***' ...

  8. Hadoop中map数的计算

    转载▼ Hadoop中在计算一个JOB需要的map数之前首先要计算分片的大小.计算分片大小的公式是: goalSize = totalSize / mapred.map.tasks minSize = ...

  9. Hadoop Serialization hadoop序列化详解(最新版) (1)【java和hadoop序列化比较和writable接口】

    初学java的人肯定对java序列化记忆犹新.最开始很多人并不会一下子理解序列化的意义所在.这样子是因为很多人还是对java最底层的特性不是特别理解,当你经验丰富,对java理解更加深刻之后,你就会发 ...

  10. numpy库数组属性查看:类型、尺寸、形状、维度

    import numpy as np   q = np.array([1,2,3,4],dtype=np.complex128)    print("数据类型",type(q))  ...