block(代码块)的介绍以及使用方法和变量之间的关系
http://blog.csdn.net/menxu_work/article/details/8762848
object-c(66) 
Block是什么?Block是C语言的一个语法特性,同时也是C语言的运行时特性,它很像C中的函数指针,因为你可以像使用函数指针一样的去使用block对象;它也很像C++中的函数对象,因为除了要执行的代码,block还可以携带和block绑定的状态信息。 因此,block是一个对象,这个对象里包含了要执行的代码片段以及一些状态信息。 MacOSX 10.6和iOS 4.0以上版本的Xcode开发包提供了对block的支持。 Block的功能block是一片具有以下特性的内联代码片段集合:
Block的用法作为一个自包含的代码片段,由于以下特性,block很适合作为回调函数的替代方案:
如何声明和定义Block你可以通过^操作符定义一个block类型的变量,用{}来圈定block的代码片段,如下图所示:
再次声明:block可以访问和block定义在同一个词法范围里的变量。 int multiplier = 7; 直接使用Block在更多的时候,你并不需要定义自己的Block类型,而是在API中直接编写block代码片段,例如:qsort_b。 char *myCharacter[3] = { "safari", "ie", "chrome" };
Block和CocoaCocoa framework中很多方法使用了Block作为其参数(尽管也有对应的callback版本,但还是推荐使用 block版本)。在动画以及集合遍历方面,block很常见。 NSArray *stringsArray = [NSArray arrayWithObjects: block和变量之间的关系这一部分涉及内存管理相关的内容,为了正确的使用block,理解并记住它们,很重要: 在一个block代码片段的内部,你可以使用三种不同类型的变量(就像你在函数里一样):
当在一个Block里使用变量时,应遵循以下规则:
局部变量的值,取最内层词法范围里,局部变量的值;
正确的: int x = 123; 错误的: int x = 123;
void (^printXandY)(int) = ^(int y) {
关于__block的进一步讨论
下面这个例子用于展示,各种类型的变量与__block之间的交互: extern NSInteger CounterGlobal; __block和Object C对象之间的关系如果,你在一个方法的实现里,使用了__block,则:
__block和C++对象之间的关系需要注意两点:
|
change :
int (myBlock)(int) = (int num) { return num ^ multipiler; }
to :
int (myBlock)(int) = (int num) { return num * multipiler; }
来自:http://code.google.com/p/nevel-mercury/wiki/GetFamiliarWithBlock
block(代码块)的介绍以及使用方法和变量之间的关系的更多相关文章
- block代码块介绍
关于block的简单介绍 什么是block? Block是C语言的一个语法特性,同时也是C语言的运行时特性,它很像C中的函数指针,因为你可以像使用函数指针一样的去使用block对象:它也很像C++中的 ...
- IOS Block代码块的定义与使用
代码块的本质是和其他的变量类似,不同的是,代码块存储的数据是一个函数体.使用代码块,你可以像调用其他标准函数一样的调用,可以传入参数,并得到返回值. 脱字符是代码块的语法标记.下图表示代码块的 ...
- Block代码块中使用局部变量注意点
第一次写代码遇到报这个错,实在是想不通为什么,按常理应该是不会有问题,报错的呀??纠结了一会之后只好仔细查看报错原因咯,原来是: 当我们在block代码块中使用局部变量时,就会很容易出现如图的错误. ...
- IOS学习4——block代码块
本文转载自:iOS开发-由浅至深学习block 一.关于block 在iOS 4.0之后,block横空出世,它本身封装了一段代码并将这段代码当做变量,通过block()的方式进行回调.这不免让我们想 ...
- OC Block(代码块)
#import "ViewController.h" @interface ViewController () @end @implementation ViewControlle ...
- java synchronized修饰普通方法,修饰静态方法,修饰代码块,修饰线程run方法 比较
synchronized用于多线程设计,有了synchronized关键字,多线程程序的运行结果将变得可以控制.synchronized关键字用于保护共享数据. synchronized实现同步的机制 ...
- iOS - OC Block 代码块
前言 Block 是一段预先准备好的代码,可以在需要的时候执行,可以当作参数传递.Block 可以作为函数参数或者函数的返回值,而其本身又可以带输入参数或返回值.Block 是 C 语言的,类似于一个 ...
- iOS - Block 代码块
1.Block Block 是一段预先准备好的代码,可以在需要的时候执行,可以当作参数传递.Block 可以作为函数参数或者函数的返回值,而其本身又可以带输入参数或返回值.Block 是 C 语言的, ...
- 构造方法、封装、关键字(this、static)和代码块的介绍
1.构造方法 1.1 构造方法与成员方法的区别 构造方法分为无参构造和有参构造,其中有参构造方法和无参构造方法为方法的重载关系. 构造方法在初始化一个类的对象时进行调用,它没有返回值,方法名与类名相同 ...
随机推荐
- 并查集(路径更新) LA 3027 Corporative Network
题目传送门 题意:训练指南P192 分析:主要就是一个在路径压缩的过程中,更新点i到根的距离 #include <bits/stdc++.h> using namespace std; c ...
- git 学习笔记7--branch
分支是git的必杀技. 站点另一个角度,分支是的快照移动有向图,刚好是拓扑排序的一种例子. basic git branch testing #创建分支 git checkout testing #切 ...
- Oracle 使用小计(4)
1.oracle字符串分割函数split )定义split_type类型: CREATE OR REPLACE TYPE split_type IS TABLE OF VARCHAR2 (4000) ...
- WPF之依赖属性
Introduction When you begin to develop appliations with WPF, you will soon stumble across Dependency ...
- php访问url的四种方式
1.fopen方式//访问指定URL函数 function access_url($url) { if ($url=='') return false; $fp = fopen($url, 'r') ...
- 记忆用户设置-提升程序的体验VB/C#
有时候,设计的程序有很多的控件,甚至多达近百个,尤其是一些工控软件等,程序运行所需的各种参数都是由用户通过这些控件设置而来,那么记录用户的设置就显得十分必要.如果程序出现异常,起码重新打开可以不用再一 ...
- Hibernate4Maven
How to create a Maven project with Hibernate libs? This blog will be a demo to describe this issue. ...
- Thymeleaf基本知识
Thymeleaf是个XML/XHTML/HTML5模板引擎,可以用于Web与非Web应用. Thymeleaf的主要目标在于提供一种可被浏览器正确显示的.格式良好的模板创建方式,因此也可以用作静态建 ...
- 李洪强iOS经典面试题下
李洪强iOS经典面试题下 21. 下面的代码输出什么? @implementation Son : Father - (id)init { self = [super init]; if (self) ...
- [CareerCup] 17.7 English Phrase Describe Integer 英文单词表示数字
17.7 Given any integer, print an English phrase that describes the integer (e.g., "One Thousand ...
