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中采用的一种内存管理方式. 指针变量与对象所有权 指针变量暗含了对其 ...
随机推荐
- Python学习笔记(3)--数据结构之列表list
Python的数据结构有三种:列表.元组和字典 列表(list) 定义:list是处理一组有序项目的数据结构,是可变的数据结构. 初始化:[], [1, 3, 7], ['a', 'c'], [1, ...
- COGS——T1588. [USACO FEB04]距离咨询
http://cogs.pro/cogs/problem/problem.php?pid=1588 ★★ 输入文件:dquery.in 输出文件:dquery.out 简单对比时间限制:1 ...
- ArcGIS api for javascript——显示地图属性
描述 本例展示了如哦读取地图和图层的属性和返回信息给用户.本例中的四个按钮允许用户接收地图属性.每个按钮调用不同的函数. ·Get All Map Layers - 这个按钮调用getMapLayer ...
- Codeforces Round #337 (Div. 2) 610C Harmony Analysis(脑洞)
C. Harmony Analysis time limit per test 3 seconds memory limit per test 256 megabytes input standard ...
- 跨域post 及 使用token防止csrf 攻击
环境: 后台使用的python - flask 前台使用angular框架 1.一个跨域post的样例: 跨域post有多种实现方式: 1.CORS:http://blog.csdn.net/hfah ...
- [9]EC_屏蔽ecshop云提示no_license
安装完后,打开后台就看到这个,特别烦,想立刻干掉它. watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdXB0b255dWFu/font/5a6L5L2T/f ...
- WebForms简介
http://www.w3school.com.cn/aspnet/aspnet_intro.asp ASP.NET 是下一代 ASP,不是 ASP 的更新版本. https://docs.micro ...
- 流量数据iftop命令
yum install flex byacc libpcap ncurses ncurses-devel libpcap-devel tar zxvf iftop-0.17.tar.gz cd ift ...
- impala 概述
impala 概述 什么是Impala? Impala是用于处理存储在Hadoop集群中的大量数据的MPP(大规模并行处理)SQL查询引擎. 它是一个用C ++和Java编写的开源软件. 与其他Had ...
- 超级硬件代理解决企业Web提速上网问题
超级硬件代理解决企业Web提速上网问题 需求分析: XX集团是五家企业重组建立的特大型工程勘察设计咨询企业,下设10多个分公司,上网人数众多.有多台WEB server,对外服务,访问量及大.以前无论 ...