初学Objective - C语法之代码块(block)
一、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)的更多相关文章
- Objective-C语法之代码块(block)的使用
代码块本质上是和其它变量相似.不同的是,代码块存储的数据是一个函数体.使用代码块是,你能够像调用其它标准函数一样,传入參数数,并得到返回值. 脱字符(^)是块的语法标记.依照我们熟悉的參数语法规约所定 ...
- Objective-C语法之代码块(block)的使用 (转载)
代码块本质上是和其他变量类似.不同的是,代码块存储的数据是一个函数体.使用代码块是,你可以像调用其他标准函数一样,传入参数数,并得到返回值. 脱字符(^)是块的语法标记.按照我们熟悉的参数语法规约所定 ...
- 代码块(block)的使用
Objective-C语法之代码块(block)的使用 代码块本质上是和其他变量类似.不同的是,代码块存储的数据是一个函数体.使用代码块是,你可以像调用其他标准函数一样,传入参数数,并得到返回值. 脱 ...
- 从C#到Objective-C,循序渐进学习苹果开发(4)--代码块(block)和错误异常处理的理解
本随笔系列主要介绍从一个Windows平台从事C#开发到Mac平台苹果开发的一系列感想和体验历程,本系列文章是在起步阶段逐步积累的,希望带给大家更好,更真实的转换历程体验.本文继续上一篇随笔<从 ...
- Objective-C-----协议protocol,代码块block,分类category
概述 ObjC的语法主要基于smalltalk进行设计的,除了提供常规的面向对象特性外,还增加了很多其他特性,本文将重点介绍objective-C中一些常用的语法特性. 当然这些内容虽然和其他高级语言 ...
- 04OC之分类Category,协议Protocol,Copy,代码块block
一.Protocol协议 我们都知道,在C#有个规范称之为接口,就是规范一系列的行为,事物.在C#中是使用Interface关键字来声明一个接口的,但是在OC中interface是用来声明类,所以用了 ...
- [转]iOS代码块Block
代码块Block是苹果在iOS4开始引入的对C语言的扩展,用来实现匿名函数的特性,Block是一种特殊的数据类型,其可以正常定义变量.作为参数.作为返回值,特殊地,Block还可以保存一段代码,在需要 ...
- iOS学习之代码块(Block)
代码块(Block) (1)主要作用:将一段代码保存起来,在需要的地方调用即可. (2)全局变量在代码块中的使用: 全局变量可以在代码块中使用,同时也可以被改变,代码片段如下: ;//注意:全局变量 ...
- 一篇文章看懂iOS代码块Block
block.png iOS代码块Block 概述 代码块Block是苹果在iOS4开始引入的对C语言的扩展,用来实现匿名函数的特性,Block是一种特殊的数据类型,其可以正常定义变量.作为参数.作为返 ...
随机推荐
- ubuntu系统部署python3.6.4
Ubuntu的版本为16.04,系统自带的Python版本较低,使用亲本版本3.6.4,下为安装步骤: 一.官网下载Python3.6.4版本 新建目录: sudo mkidr /usr/local/ ...
- C语言中的if与else if
今天发现一个比较不理解的代码,是关于else if这个判断语句的代码.代码如下 #include<stdio.h> ; int main(void) { ) { printf(" ...
- scala(9) Monad
一个单子(Monad)说白了不过就是自函子范畴上的一个幺半群而已.这句话涉及到了几个概念:单子(Monad),自函子(Endo-Functor),幺半群(Monoid),范畴(category). 范 ...
- Burpsuite神器常用功能使用方法总结
Burpsuite介绍: 一款可以进行再WEB应用程序的集成攻击测试平台. 常用的功能: 抓包.重放.爆破 1.使用Burp进行抓包 这边抓包,推荐360浏览器7.1版本(原因:方便) 在浏览器设置代 ...
- 20155336 2016-2017-2《JAVA程序设计》第二周学习总结
20155336 2016-2017-2 <JAVA 程序设计>第二周学习总结 教材学习内容 1: GIT版本检测 2: JAVA中基本类型 整数 字节 浮点数 字符 布尔(▲) 通过AP ...
- PostgreSQL参数学习:wal_keep_segments
http://www.postgresql.org/docs/9.3/static/runtime-config-replication.html 参考官方文档: wal_keep_segments ...
- Discover Feature Engineering, How to Engineer Features and How to Get Good at It
Feature engineering is an informal topic, but one that is absolutely known and agreed to be key to s ...
- 【转载】混编ObjectiveC++
原文:混编ObjectiveC++ 最近有点炒冷饭的嫌疑,不过确实以前没有Git Or Blog的习惯,所以很多工作上的技术分享就存留在了电脑的文档里,现在还是想重新整理一下,再分享出来. 混编C++ ...
- Linux系统处理木马病毒的思路
一.清除木马程序步骤 1.1 执行命令,每1秒刷新一次,显示整个命令路径,而不是命令的名称. [root@linux-node1 ~]# top -d -c 1.2 查找可疑进程(比较奇怪的进程名称) ...
- Zabbix学习之路(九)之低级自动发现以及MySQL多实例
1.概述 Zabbix的网络发现是指zabbix server通过配置好的规则,自动添加host,group,template Zabbix的主动注册刚好和网络发现是相反的,功能基本一致.zabbix ...