ios学习之block初探
1. block概念
block是ios4.0+和Mac osX 10.6以后引进的对C语言的拓展,用来实现匿名函数的特性。所谓匿名函数,也称闭包函数。即同意创建一个暂时的没有指定名称的函数。
最经经常使用作回调函数(callback)參数的值,当然也有其它使用方法。
比方说作为一个变量值来使用,详细使用方法将在后面介绍。
2. block定义:
详细定义例如以下图所看到的:
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMzk1MDg1NA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">
1⃣️ 我们先来定义一个简单的。无返回值,无參数的block:
-(void)blockTestOne
{
void(^blockOne)(void) = ^(void){
NSLog(@"this is blockOne");
};
blockOne();
}
能够看到,上面的代码,我们是在一个函数blockTestOne里定义了一个无返回值,无參数的block,叫做blockOne。然后我们紧接着在后面调用了这个blockOne。
由于我们的block没有參数。所以在写的时候还能够简写成:
-(void)blockTestOne
{
void(^blockOne)(void) = ^{
NSLog(@"this is blockOne");
};
blockOne();
}
即省略了等号后面的參数列表。
2⃣️接下来,我们定义一个有參数,无返回值的block:
-(void)blockTestTwo
{
void(^blockTwo)(int) = ^(int a){
NSLog(@"blockTwo == %d", a);
};
blockTwo(20);
}
在这里,我们定义了一个无返回值。參数类型为int型的block变量,名为blockTwo。然后我们调用了blockTwo,传入參数20,控制台打印结果为:
3⃣️然后,我们再来定义一个有返回值,而且有參数的block:
- (void)blockTestThree
{
int (^blockThree)(int) = ^(int b){
NSLog(@"blockThree parameter == %d", b);
return 10;
};
NSLog(@"%d", blockThree(20));
<h2>}</h2>
我们在这里定义了一个返回值为int型。而且參数为int型的block变量,然后block实现里面打印了他的參数,最后回返一个常量10;我们又在block打印了blockThree,而且给他传了个參数20。
控制台打印结果为:
在这里须要注意的是,由于我们定义的blockThree是有返回值的,所以当在他的实现中(即等号右边大括号中)。假设没有返回值return。编译器会直接给我们报错:
3. block的存储域。
看过我之前博客文章《block传值以及利用block封装一个网络请求类》点击打开链接的朋友一定好奇,为什么利用block定义的属性,要用copy特性?如图:
- (void)testBlock
{
void(^blockOne)(void) = ^{
NSLog(@"this is blockOne");
};
int c = 10;
void(^blockTwo)(void) = ^(void){
NSLog(@"this is blockTwo %d ", c);
};
void(^blockThree)(void) = [[blockTwo copy] autorelease];
NSLog(@"blockOne address == %@", blockOne);
NSLog(@"blockTwo address == %@", blockTwo);
NSLog(@"blockThree address == %@", blockThree);
}
在上面这段代码中,我们分别定义了三个block变量。blockOne,blockTwo和blockThree,然后,我们分别打印了他们三个的地址,他们三个的差别是,blockOne实现的不过打印一句话,没有使用不论什么外部变量(block定义以外的变量),而blockTwo实现的是打印了一句话。并写使用了一个外部变量c,而blockThree实现的是将blockTwo拷贝一分即copy一下,然后控制台打印的结果例如以下:
。还有__block的使用,记得关注哦。今天实在太晚了。
。
。
ios学习之block初探的更多相关文章
- IOS学习之block代码块
前言: block这个名词对于做一般开发者来说可能会觉得稀奇古怪而非常陌生,但是对于iOS工程师来说,在整个开发中到处都是它的影子,今天一大早觉得在假期学习一下它,对明年的iOS开发工作做个准备,突然 ...
- IOS学习4——block代码块
本文转载自:iOS开发-由浅至深学习block 一.关于block 在iOS 4.0之后,block横空出世,它本身封装了一段代码并将这段代码当做变量,通过block()的方式进行回调.这不免让我们想 ...
- ios学习笔记block回调的应用(一个简单的例子)
一.什么是Blocks Block是一个C级别的语法以及运行时的一个特性,和标准C中的函数(函数指针)类似,但是其运行需要编译器和运行时支持,从ios4.0开始就很好的支持Block. 二. ...
- iOS学习之block
Block是C语言的扩充功能.带有自动变量(局部变量)的匿名函数.(不带有名称的函数) 非匿名函数:int func(int count):(声明了名称为func的函数)使用:int result = ...
- iOS 学习 - 9.Block 入门
来自李明杰的视频. block 用来保存一段代码 block 的标志:^ block 跟函数很像: 1).可以保存代码 2).有返回值 3). 有形参 temp1:没有返回值.没有形参的 blo ...
- 原 iOS深入学习(Block全面分析)http://my.oschina.net/leejan97/blog/268536
原 iOS深入学习(Block全面分析) 发表于1年前(2014-05-24 16:45) 阅读(26949) | 评论(14) 39人收藏此文章, 我要收藏 赞21 12月12日北京OSC源创会 ...
- 【原】iOS学习47之第三方-FMDB
将 CocoaPods 安装后,按照 CocoaPods 的使用说明就可以将 FMDB 第三方集成到工程中,具体请看博客iOS学习46之第三方CocoaPods的安装和使用(通用方法) 1. FMDB ...
- iOS学习路线图
一.iOS学习路线图 二.iOS学习路线图--视频篇 阶 段 学完后目标 知识点 配套学习资源(笔记+源码+PPT) 密码 基础阶段 学习周期:24天 学习后目标: ...
- iOS学习笔记之ARC内存管理
iOS学习笔记之ARC内存管理 写在前面 ARC(Automatic Reference Counting),自动引用计数,是iOS中采用的一种内存管理方式. 指针变量与对象所有权 指针变量暗含了对其 ...
随机推荐
- Android Support Library 23.2用法简析
写在前面的几句话 前几天谷歌发布了android-support-library-23.2支持库,这一次23.2版本增加了一些新的支持库以及新的功能.接下来这篇文章,就是对这些新功能部分做简单的用法介 ...
- python 写了一个批量拉取文件进excel文档
路径如: C:\\Users\\huaqi\\Desktop\\信息收集 “信息收集”目录下有以下子目录:[技术,客服,运营,行政] “技术”目录下有以下子文件:[小白.txt,小红.txt,小黑.t ...
- orm 通用方法——QueryModelById 主键查询
方法定义: /** * 描述:根据主键查询 * 作者:Tianqi * 日期:2014-09-15 * param:model 对象实例,包含主键 * return:对象 * */ func Quer ...
- ToF相机学习笔记之基本知识
ToF相机属于一种非接触式光学传感器,通过计算发射激光的飞行时间获取对应像素的深度信息.就非接触式距离测量方法而言,其分类可用下表表示如下: 1.1 ToF传感器基础 一个逐点式的ToF传感器采用了雷 ...
- [Chromium文档转载,第004章]Mojo Synchronous Calls
For Developers > Design Documents > Mojo > Synchronous Calls Think carefully before ...
- @Accessors
@Accessors 作用:存取器,用于配置getter和setter方法的生成结果 三个属性:fluent.chain.prefix 1.fluent:流畅的,设置为true,getter和sett ...
- 03014_properties配置文件
1.使用properties配置文件 (1)开发中获得连接的4个参数(驱动.URL.用户名.密码)通常都存在配置文件中,方便后期维护,程序如果需要更换数据库,只需要修改配置文件即可: (2)通常情况下 ...
- 洛谷——P1518 两只塔姆沃斯牛 The Tamworth Two
https://www.luogu.org/problem/show?pid=1518 题目背景 题目描述 两只牛逃跑到了森林里.农夫John开始用他的专家技术追捕这两头牛.你的任务是模拟他们的行为( ...
- HDU 4786 Fibonacci Tree 生成树
链接:http://acm.hdu.edu.cn/showproblem.php?pid=4786 题意:有N个节点(1 <= N <= 10^5),M条边(0 <= M <= ...
- Hadoop-2.6.0上的C的API訪问HDFS
在通过Hadoop-2.6.0的C的API訪问HDFS的时候,编译和执行出现了不少问题,花费了几天的时间,上网查了好多的资料,最终还是把问题给攻克了 參考文献:http://m.blog.csdn.n ...