一 定义

Block封装了一段代码,可以在任何时候执行。

Block可以作为函数参数或者函数的返回值,而其本身又可以带输入参数或返回值。

二 使用

1. 定义函数指针,然后在实现。

 #import <Foundation/Foundation.h>

 int (^max)(int,int);

 int main(int argc, const char * argv[]) {

     max = ^(int a,int b){

         return a >b ? a:b;
}; int maxVal = max(, );
NSLog(@"maxVal=%d" , maxVal ); return ;
}

在第3行定义函数指针,在第7行实现函数指针,在12行调用函数指针。

2. 在定义函数指针的同时,并实现。

#import <Foundation/Foundation.h>

int (^max)(int,int) = ^(int a, int b){
return a > b ? a : b;
}; int main(int argc, const char * argv[]) {
int maxVal = max(, );
NSLog(@"maxVal=%d" , maxVal ); return ;
}

3.用typedef先声明类型,再定义变量进行赋值

#import <Foundation/Foundation.h>

int main(int argc, const char * argv[]) {
typedef int (^max)(int,int);
max getMax = ^(int a, int b){
return a > b ? a:b;
}; int maxVal = getMax(, );
NSLog(@"maxVal=%d" , maxVal ); return ;
}

Block可以访问局部变量,但是不能修改。

  int sum = ;
int (^myBlock)(int) = ^(int x){
int result = sum++;
return x * x;
};

如果要修改就要在第一行加关键字:__block

__block int sum = ;
int (^myBlock)(int) = ^(int x){
int result = sum++;
return x * x;
};

资料参考:

http://www.cnblogs.com/ljcgood66/p/4970628.html

http://www.cnblogs.com/e8net/p/3750825.html

http://www.cnblogs.com/goodboy-heyang/p/5240004.html

IOS基础之 (十二) Block的更多相关文章

  1. IOS基础之 (十二) 类的扩展

    对OC类的扩展总结如下,共有4个: 1.子类 subClass 作用:可以使用类的继承来增添父类的变量和方法. 写法:在.h文件中 @interface Student : Person 2.分类 C ...

  2. Bootstrap <基础三十二>模态框(Modal)插件

    模态框(Modal)是覆盖在父窗体上的子窗体.通常,目的是显示来自一个单独的源的内容,可以在不离开父窗体的情况下有一些互动.子窗体可提供信息.交互等. 如果您想要单独引用该插件的功能,那么您需要引用  ...

  3. Java 多线程基础(十二)生产者与消费者

    Java 多线程基础(十二)生产者与消费者 一.生产者与消费者模型 生产者与消费者问题是个非常典型的多线程问题,涉及到的对象包括“生产者”.“消费者”.“仓库”和“产品”.他们之间的关系如下: ①.生 ...

  4. Python3基础(十二) 学习总结·附PDF

    Python是一门强大的解释型.面向对象的高级程序设计语言,它优雅.简单.可移植.易扩展,可用于桌面应用.系统编程.数据库编程.网络编程.web开发.图像处理.人工智能.数学应用.文本处理等等. 在学 ...

  5. ios基础篇(二十九)—— 多线程(Thread、Cocoa operations和GCD)

    一.进程与线程 1.进程 进程是指在系统中正在运行的一个应用程序,每个进程之间是独立的,每个进程均运行在其专用且受保护的内存空间内: 如果我们把CPU比作一个工厂,那么进程就好比工厂的车间,一个工厂有 ...

  6. ios基础篇(二十五)—— Animation动画(UIView、CoreAnimation)

    Animation主要分为两类: 1.UIView属性动画 2.CoreAnimation动画 一.UIView属性动画 UIKit直接将动画集成到UIView类中,实现简单动画的创建过程.UIVie ...

  7. ios基础篇(二十六)—— UITableViewCell的分组索引与标记

    一.表视图的索引目录 首先要创建一个TableView,之前有说过,这里就不详细说了(参考前面第十四篇). 直接贴代码吧, #import "ViewController.h" @ ...

  8. ios基础篇(二十四)—— 文字、图片的绘制及其自定义Button

    这篇文章我们主要来拿官方的控件来研究一下,我们来仿照官方的控件,自己来实现它提供的控件: 首先来看看基本的图片与文字的绘制,很简单. 一.imageView 所有的视图都是继承自UIView,所以我们 ...

  9. iOs基础篇(二十二)—— UIPickerView、UIDatePicker控件的使用

    一.UIPickerView UIPickerView是一个选择器控件,可以生成单列的选择器,也可生成多列的选择器,而且开发者完全可以自定义选择项的外观,因此用法非常灵活. 1.常用属性 (1)num ...

随机推荐

  1. R 语言assign 和get 函数用法

    assign函数在循环时候,给变量赋值,算是比较方便 1.给变量赋值 for (i in 1:(length(rowSeq)-1)){ assign(paste("nginx_server_ ...

  2. sublime text2 常用快捷键

    1. ctrl+方向键  按单词移动 2. ctrl+shift + 方向键  按单词选取 3. ctrl + F3 查找选定的或光标所在单词 4. F3 查找特定的单词(一般查找的流程是先ctrl+ ...

  3. 09Mybatis_入门程序——删除用户以及更新用户

    删除用户: 还是前面的的案例,别的都不改,就修改两处地方.1.user.xml文件以及2.Mybatis_first.java文件 user.xml文件代码修改如下: <?xml version ...

  4. C# WinForm PropertyGrid用法

    关于C# PropertyGrid的用法没有找到,找到一个C++的用法.模仿着使用了一下,感觉挺不错,分享一下.基本用法:拖个PropertyGrid,绑定一个属性类就行了. 大气象 Code hig ...

  5. 找不到类型{0} 它在 ServiceHost 指令中提供为 Service 特性值

    由于我把binding改成wsHttpBinding,在web.config里也改了命名空间 services的类名也改成了跟 web.config对应的命名空间后 在添加引用后,出现了错误: “找不 ...

  6. iOS——特殊的几个控件

    29.UITextChecker您使用的UITextChecker类的实例来检查拼写错误的单词字符串(通常是文档中的文本).30.UITextPosition一个UITextPosition对象代表一 ...

  7. Javascript设计模式之我见:迭代器模式

    大家好!本文介绍迭代器模式及其在Javascript中的应用. 模式介绍 定义 提供一种方法顺序一个聚合对象中各个元素,而又不暴露该对象内部表示. 类图及说明 Iterator抽象迭代器 抽象迭代器负 ...

  8. inconsistent line count calculation in projection snapshot

    1.现象 在vs2013中,按Ctrl + E + D格式化.cshtml代码,vs2013系统崩溃.报:inconsistent line count calculation in projecti ...

  9. 记录我开始学习 Git的路程

    工作半年多了,总觉得没学到什么东西,于是乎找了个Git学习一下,感觉还蛮厉害的样子.为此记录下我的路程 2015,11,26 更新 前面的路都挺艰难的,在官网下载msysgit网速几乎为0(心情千万只 ...

  10. JavaScript实例---表格隔行变色以及移入鼠标高亮

    <!DOCTYPE HTML> <html> <head> <meta charset="utf-8"> <title> ...