一、block声明

1、无参数,无返回值: void (^sayHi)();

2、有参数,有返回值: NSInteger (^operateOfValue)(NSInteger num);

block的声明:返回值类型(^block变量名)(参数列表)

脱字符(^)是块的语法标记

二、block实现

block变量名 = ^返回值类型(参数列表)

1、  sayHi = ^{

NSLog(@"你好");

};

2、 operateOfValue = ^ NSInteger (NSInteger num) {

return - num;

};

注意:block的声明和实现可以写在一起,例如:

NSInteger (^maxValue)(NSInteger num1, NSInteger num2) = ^ NSInteger (NSInteger num1, NSInteger num2){

return  num1 > num2 ? num1 : num2;

};

三、block调用

block变量名(参数)

NSLog(@"相反数 = %ld", operateOfValue(- 10));

四、block作为方法的参数

1、创建一个Person类

2、Person.h  声明               block作为参数    返回值     参数

+ (void) personWithExecute:(void (^)(void)) block;

3、Person.m实现

+ (void)personWithExecute:(void (^)(void))block {

if (block) {      // 如果block存在

block();

    }

    }

4、main.m中调用

[Person personWithExecute:^{

NSLog(@"打招呼");

}];

注意: 程序运行过程 ---》 先走类方法,在实现文件中走block(),回调 -- NSLog

五、block对参数的访问

1、block对其外面的局部变量,只能读,如果非要对其做修改,需要在定义外部参数是在其前面加上__block(两个下划线),例如:

        __block int  a = 10;

void (^block)(void) = ^{

a = 30;

NSLog(@"block -  %d", a);

};

block ();

2、block对于对象类型,可读可写,可以直接进行修改,例如:

NSMutableArray *array = [NSMutableArray arrayWithObjects:@"1", @"2", nil];

void (^arrayBlock)(void) = ^{

[array addObject:@"3"];

NSLog(@"arrayBlock -- %@", array);

};

arrayBlock();

六、typedef  block

block代码块定义和实现看起来都有很大一块,可以用typedef重命名:

示例1:

1、Person.h:

typedef  block返回类型(^)重命名名字(参数列表)

typedef NSInteger (^SUMBLOCK)(NSInteger a, NSInteger b);

+ (NSInteger)sumOfNum1:(NSInteger)num1 andNum2:(NSInteger)num2 sumBlock:(SUMBLOCK)block;

2、Person.m :

+ (NSInteger)sumOfNum1:(NSInteger)num1 andNum2:(NSInteger)num2 sumBlock:(SUMBLOCK)block {

return block(num1, num2);

}

示例2:

typedef void(^SAYHI)(void);    // 相当于定义一个类型

SAYHI sayHi = ^{

NSLog(@"你好");

};

sayHi();

初学Objective - C语法之代码块(block)的更多相关文章

  1. Objective-C语法之代码块(block)的使用

    代码块本质上是和其它变量相似.不同的是,代码块存储的数据是一个函数体.使用代码块是,你能够像调用其它标准函数一样,传入參数数,并得到返回值. 脱字符(^)是块的语法标记.依照我们熟悉的參数语法规约所定 ...

  2. Objective-C语法之代码块(block)的使用 (转载)

    代码块本质上是和其他变量类似.不同的是,代码块存储的数据是一个函数体.使用代码块是,你可以像调用其他标准函数一样,传入参数数,并得到返回值. 脱字符(^)是块的语法标记.按照我们熟悉的参数语法规约所定 ...

  3. 代码块(block)的使用

    Objective-C语法之代码块(block)的使用 代码块本质上是和其他变量类似.不同的是,代码块存储的数据是一个函数体.使用代码块是,你可以像调用其他标准函数一样,传入参数数,并得到返回值. 脱 ...

  4. 从C#到Objective-C,循序渐进学习苹果开发(4)--代码块(block)和错误异常处理的理解

    本随笔系列主要介绍从一个Windows平台从事C#开发到Mac平台苹果开发的一系列感想和体验历程,本系列文章是在起步阶段逐步积累的,希望带给大家更好,更真实的转换历程体验.本文继续上一篇随笔<从 ...

  5. Objective-C-----协议protocol,代码块block,分类category

    概述 ObjC的语法主要基于smalltalk进行设计的,除了提供常规的面向对象特性外,还增加了很多其他特性,本文将重点介绍objective-C中一些常用的语法特性. 当然这些内容虽然和其他高级语言 ...

  6. 04OC之分类Category,协议Protocol,Copy,代码块block

    一.Protocol协议 我们都知道,在C#有个规范称之为接口,就是规范一系列的行为,事物.在C#中是使用Interface关键字来声明一个接口的,但是在OC中interface是用来声明类,所以用了 ...

  7. [转]iOS代码块Block

    代码块Block是苹果在iOS4开始引入的对C语言的扩展,用来实现匿名函数的特性,Block是一种特殊的数据类型,其可以正常定义变量.作为参数.作为返回值,特殊地,Block还可以保存一段代码,在需要 ...

  8. iOS学习之代码块(Block)

    代码块(Block) (1)主要作用:将一段代码保存起来,在需要的地方调用即可. (2)全局变量在代码块中的使用: 全局变量可以在代码块中使用,同时也可以被改变,代码片段如下: ;//注意:全局变量 ...

  9. 一篇文章看懂iOS代码块Block

    block.png iOS代码块Block 概述 代码块Block是苹果在iOS4开始引入的对C语言的扩展,用来实现匿名函数的特性,Block是一种特殊的数据类型,其可以正常定义变量.作为参数.作为返 ...

随机推荐

  1. celery知多少

    Celery 1.什么是Celery Celery是一个简单.灵活且可靠的,处理大量消息的分布式系统 专注于实时处理的异步任务队列 同时也支持任务调度 Celery架构 Celery的架构由三部分组成 ...

  2. hive 优化 (转)

    Hive优化 Hive优化目标 在有限的资源下,执行效率更高 常见问题 数据倾斜 map数设置 reduce数设置 其他 Hive执行 HQL --> Job --> Map/Reduce ...

  3. Dbshop v1.3任意用户密码重置漏洞

    0x00 前言 年也过的差不多了,各自也都回到岗位忙碌起来了,新的一年祝大家诸事顺利,洞洞高危!好了进入正题 0x01 漏洞简介 本次主要写个简单的逻辑漏洞!然后抛个Message 内置高危. 1.找 ...

  4. Go语言反射之类型反射

    1 概述 类似于 Java,Go 语言也支持反射.支持反射的语言可以在运行时对程序进行访问和修改.反射的原理是在程序编译期将反射信息(如类型信息.结构体信息等)整合到程序中,并给提供给程序访问反射信息 ...

  5. 20155204 2016-2017-2《Java程序设计》课程总结

    20155204 2016-2017-2<Java程序设计>课程总结 目录 作业链接汇总 作业总结 实验报告链接汇总 代码托管链接 课堂项目实践 学习经验 问卷调查 链接二维码 (按顺序) ...

  6. 安装虚拟机及学习linux系统 20155222卢梓杰

    安装虚拟机及学习linux系统 20155222卢梓杰 首先按照要求下载virtualbox,没有遇到问题. 接下来新建一个虚拟机,按照要求应当安装乌班图64,这里只有32位的.在网上搜寻了许久,终于 ...

  7. 为什么说private方法是有罪的

    具体的这句话从什么地方获得,我已经无从考证了,但是想想我们现在使用private的场景,你慢慢的就会发现,private的方法,大多数都是copy代码,当然我只是说大多数,还有就是大多数private ...

  8. WPF MVVM从入门到精通5:PasswordBox的绑定

    原文:WPF MVVM从入门到精通5:PasswordBox的绑定   WPF MVVM从入门到精通1:MVVM模式简介 WPF MVVM从入门到精通2:实现一个登录窗口 WPF MVVM从入门到精通 ...

  9. [BZOJ3218]a + b Problem-[主席树+网络流-最小割]

    Description 传送门 Solution 此处我们按最小割的思路考虑. 暴力:S->i表示该点选黑色的权值b[i]:i->T表示该点选白色的权值w[i].考虑如果某个点i受点j为白 ...

  10. The filename 未命名.ipa in the package contains an invalid character(s). The valid characters are: A-Z, a-z, 0-9, dash, period, underscore, but the name cannot start with a dash, period, or underscore

    The filename 未命名.ipa in the package contains an invalid character(s).  The valid characters are: A-Z ...