初学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是一种特殊的数据类型,其可以正常定义变量.作为参数.作为返 ...
随机推荐
- PTA(BasicLevel)-1007素数对猜想
一 问题描述-素数对 让我们定义素数差dn为:dn=pn+1−pn,其中pi是第i个素数.显然有d1=1,且对于n>1有dn是偶数.“素数对猜想”认为“ ...
- [Golang学习笔记] 07 数组和切片
01-06回顾: Go语言开发环境配置, 常用源码文件写法, 程序实体(尤其是变量)及其相关各种概念和编程技巧: 类型推断,变量重声明,可重名变量,类型推断,类型转换,别名类型和潜在类型 数组: 数组 ...
- Python-dataframe合并(merge函数)
import pandas as pd import numpy as np df1=pd.DataFrame({'key':['b','b','a','c','a','a','b'],'data1' ...
- 以太坊入门-solidity环境搭建
本地remix-ide安装教程 一 开始安装前 准备以下软件 vs2015(主要会用到vc++的工具以及Windows sdk ||vs2017没试过,不过应该可以) vs下载安装以及解压地址: h ...
- 20155227 2016-2017-2 《Java程序设计》第一周学习总结
20155227 2016-2017-2 <Java程序设计>第一周学习总结 教材学习内容总结 浏览教材,根据自己的理解每章提出一个问题 Java三个平台的区别. JDK.JRE.JVM区 ...
- 从码云把之前的代码git push 回IDEA 对IDEA里的文件进行简单操作
前情提要:我的IDEA里的项目之前已经和码云连接成功可以上传.但我直接在电脑文件夹里对文件进行重命名.剪切.粘贴等操作之后IDEA对操作后的文件不识别,无奈之下我将码云上之前的代码推回重新新建了项目. ...
- 20145209刘一阳《网络对抗》Exp8 Web基础
20145209刘一阳<网络对抗>Exp8 Web基础 基础问题回答 1.什么是表单? 表单是一个包含表单元素的区域,表单元素是允许用户在表单中(比如:文本域.下拉列表.单选框.复选框等等 ...
- Python中的对象引用、浅拷贝与深拷贝
最近项目中遇到一个Python浅拷贝机制引起的bug,由于对于Python中对象引用.赋值.浅拷贝/深拷贝机制没有足够的认识,导致调试了很久才发现问题,这里简单记录一下相关概念. 在Python的设计 ...
- js创建对象 object.create()用法
Object.create()方法是ECMAScript 5中新增的方法,这个方法用于创建一个新对象.被创建的对象继承另一个对象的原型,在创建新对象时可以指定一些属性. 语法: Object.crea ...
- C#是数据类型
C#又开始了 开始数据类型 用的软件是VS2017 E short 短整型 int 中等整型 long 长整形 string 字符串类型 bool 布尔类型(true/flase) 相当于数 ...