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. linux管道和tee命令

    ps -ef | grep docker 等价于 ps -ef &> >(grep docker) cat a.log | tee b.txt 等价于 cat a.log & ...

  2. Apache Commons之commons-lang

    org.apache.commons.lang3此包主要是高度可重用静态的工具方法,主要是对java.lang类的一些补充. package com.cxl.beanutil.test; import ...

  3. AIX系统搭建NFS服务器

    本文使用场景:aix6.1升级到aix7.1之后,需要打补丁aix7.1 TL4的补丁,补丁文件有将近10G,当多个系统都升级时,此时搭建nfs服务器,只需要一次上传,其余需升级系统作为客户端只需通过 ...

  4. pycharm2018激活

    pyCharm最新2018最新激活码 选择 Activate new license with License server (用license server 激活) 在 License sever ...

  5. 卷积神经网络中的通道 channel

    卷积神经网络中 channels 分为三种:    (1):最初输入的图片样本的 channels ,取决于图片类型,比如RGB, channels=3    (2):卷积操作完成后输出的 out_c ...

  6. LeetCode412Fizz Buzz

    写一个程序,输出从 1 到 n 数字的字符串表示. 1. 如果 n 是3的倍数,输出"Fizz": 2. 如果 n 是5的倍数,输出"Buzz": 3.如果 n ...

  7. 安装office2016时弹出microsoft setup bootstrapper已停止工作的解决办法

    安装office2016时安装进度条走到最后又回滚,弹出microsoft setup bootstrapper已停止工作,最后“安装出错” 经过了1天的试尽了各种控制面板卸载.文件夹删除.offic ...

  8. 了解真实的『REM』多终端屏幕适配

    作者:hbxeagle 链接:github.com/hbxeagle/rem/blob/master/README.md rem 作为一个低调的长度单位,由于手机端网页的兴起,在屏幕适配中得到重用.使 ...

  9. Visifire For WPF 图表控件 如何免费

    可能用WPF生成过图表的开发人员都知道,WPF虽然本身的绘图能力强大,但如果每种图表都自己去实现一次的话可能工作量就大了, 尤其是在开发时间比较紧的情况下.这时候有必要借助一种专业的图表工具. Vis ...

  10. JavaScript的坑,缺陷

    JavaScript的缺陷 1.在做判断的时候用=======而不是== 2.浮点预算有精度问题 通过差值去把这个精度锁定到一个范围 Math. Abs(A-B)<0.0001** 3.null ...