代码块是对C语言中函数的扩展,由C语言实现,所以在以C为基础的语言内都是有效的,包括Objective_C,C++和Objective-C++,在Xcode的GCG与Clang工具中是有效的,但这不属于ANSI的C语言标准。
 
代码块借鉴了函数指针的语法,所以声明方法与之类似。如:
函数指针:void *(my_func)(void){/*放代码*/};
只要把“*”替换成"^"(幂符号)就可以把它转换成一个代码块的定义了。如:
代码块:void ^(my_block)(void){/*放代码*/};
 
使用例子:
int (^square_block)(int num) = ^(int num){return (num*num);};//注意分号
获取整形参数并返回了这个数字的平方。前面是定义,后面是参数列表与实现内容。
 
1 代码块使用
如果你将代码块声明为变量,就可以像函数一样使用它了。
int result = square_block(5);//幂符号在定义时才用一下
2 可以使用typedef来简化类型声明
typedef double (^BlockRef)(double c,double d);
 
BlockRef blockRef1 = ^(double c,double d){return c*d;};
NSLog(@“%d,%d”,blockRef1(2,4),blockRef1(4,5));
 
3 代码块与变量
本地变量是与代码块一周一范围的内声明的变量。本地变量会被代码块作为常量获取到。所以要修改本地变量的值,必须将它们声明为可以修改的。
错误例子:
double c = 3;
BlockRef1 block1 = ^(double a,double b){c = a*b;};
编译器会报错:Variable is not assignable (missing __block type specifier)
解决方法只需要在double c = 3;前加一个__block就可以了。(又下划线哦)
注:有些变量是无法声明为__block类型的。(1)可变长度的数组 (2)包含可变长度数组与结构体
 
代码块的内存管理需要专门关注一下,这里不表。
 
参考:《objective-C基础教程》第2版

代码块(block)简介的更多相关文章

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

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

  2. [转]iOS代码块Block

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

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

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

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

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

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

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

  6. 代码块(block)的使用

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

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

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

  8. 代码块(Block)回调一般阐述

    本章教程主要对代码块回调模式进行讲解,已经分析其他回调的各种优缺点和适合的使用场景. 代码块机制 Block变量类型 Block代码封装及调用 Block变量对普通变量作用域的影响 Block回调接口 ...

  9. Objective-C 代码块(block)的使用

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

随机推荐

  1. ThinkPHP3.1新特性:命名范围

    概述 命名范围功能,给模型操作提供了一系列的(连贯操作)封装,让你更方便的查询和操作数据.我们来具体了解下这一用法. 定义属性 要使用命名范围功能,主要涉及到模型类的_scope属性定义和scope连 ...

  2. QTP下载链接

    QTP下载链接 QTP官网下载:http://www8.hp.com/us/en/software-solutions/software.html?compURI=1172957#.UNMOQ2_FW ...

  3. Citrix服务器虚拟化之三十 XenApp 6.5发布流式应用程序

                                        Citrix服务器虚拟化之三十 XenApp 6.5发布流式应用程序   XenApp可发布以下类型的资源向用户提供信息访问,这 ...

  4. mysql 5.6 oom 图

  5. 【十分钟教会你汇编】MIPS编程入门(妈妈说标题要高大上,才会有人看>_<!)

    无意中找到一篇十分好用,而且篇幅也不是很大的入门教程,通篇阅后,再把“栗子”敲一遍,基本可以有一个比较理性的认识,从而方便更好地进一步深入学习. 废话不多说,上干货(英语好的直接跳过本人的渣翻译了哈— ...

  6. 【转】Java web 编解码

    几种常见的编码格式 为什么要编码 不知道大家有没有想过一个问题,那就是为什么要编码?我们能不能不编码?要回答这个问题必须要回到计算机是如何表示我们人类能够理解的符号的,这些符号也就是我们人类使用的语言 ...

  7. VS2012 直接浏览网页时报错

    VS2012 直接浏览网页时报错  "托管管道模式不能为集成" 只要在configuration文件里面添加   <system.webServer>     < ...

  8. 在masterpage中添加对usercontrol的引用

    在masterpage中添加对usercontrol的引用的方式: <%@ Register Src="/_controltemplates/15/Excellent Employee ...

  9. 20160417javaweb之servlet监听器

    监听器:监听器就是一个java程序,功能是监听另一个java对象变化(方法调用.属性变更) 8个监听器,分为了3种 写一个类实现响应的接口 注册监听器 -- 在web.xml中注册监听器 1.用来监听 ...

  10. #ifndef#define#endif的用法

    在网上看到了感觉作者总结得很好,作者辛苦了! #ifndef#define#endif的用法 文件中的#ifndef 头件的中的#ifndef,这是一个很关键的东西.比如你有两个C文件,这两个C文件都 ...