iOS Block 的使用

Block 是一种数据类型,用来存代码--用来保存一段代码,想用代码的时候就调用这段代码

使用场景:

1. 动画

2. 多线程

3. 集合遍历

4. 网络请求回调

区别于函数:

函数也是用来保存一段代码的,当调用函数的时候才会执行里面的代码.

但是函数不能在程序运行的时候再在指定的位置执行代码.

1. 没参数也没返回值的Block

void (^gm)() = ^{NSLog(@"........");};  //gm是Block变量的变量名,用来保存这一段代码{NSLog(@"........");}

gm();  //执行Block代码

2. 有参数没有返回值的Block

void (^gm)(int) = ^(int count){ for (int i = 0; i < count ;i++) NSLog(@"...");};//打印指定行数的...

gm(5);

3. 有参数也有返回值的Block

int (^sum)(int ,int ) = ^(int a, int b){return a+b ;};//求两个数的和

int c = sum(2,3);

typedef

typedef  旧  新 ;//用来简化类型的名称 . 用typedef 给Block的类型 定义一个别名;

1. typedef int(^MyBlock)(int, int); //Myblock   <=>   int(^) (int, int);

2. MyBlock    minus = ^ (int a,int b){return a-b};

等价于1,2  (int) (^minus)(int ,int ) = ^(int a,int b){renturn a-b;};

block 的使用场景:
 当一个函数的的代码的前边和后边的代码都一样,就是中间的代码有区别.可以将中间的代码封装成Block的代码,作为函数的参数.每次调用函数的时候,动态的将代码传进去.

Block不能传空nil,会造成坏访问.需要加上判断.

void gotWork(void (^work))

{

  NSLog(@"begin");

  if (work != nil)   //**

  {

    work();

  }

  NSLog(@"end");

}

Block 调用外部的变量:

1. Block能访问外部的变量

2. 默认情况下,Block里面不能修改外面的局部变量

  如果要修改可以在 外部的变量前加 __block

时间: 2024-08-05 17:04:52

iOS Block 的使用的相关文章

iOS block从零开始

iOS block从零开始 在iOS4.0之后,block横空出世,它本身封装了一段代码并将这段代码当做变量,通过block()的方式进行回调. block的结构 先来一段简单的代码看看: void (^myBlock)(int a) = ^(int a){ NSLog(@"%zd",a); }; NSLog(@"旭宝爱吃鱼"); myBlock(999); 输出结果: 2016-05-03 11:27:18.571 block[5340:706252] 旭宝爱吃鱼

写给喜欢用Block的朋友(ios Block)

作者:fengsh998 原文地址:http://blog.csdn.net/fengsh998/article/details/38090205 转载请注明出处 如果觉得文章对你有所帮助,请通过留言或关注微信公众帐号fengsh998来支持我,谢谢! 本文不讲block如何声明及使用,只讲block在使用过程中暂时遇到及带来的隐性危险. 主要基于两点进行演示: 1.block 的循环引用(retain cycle) 2.去除block产生的告警时,需注意问题. 有一次,朋友问我当一个对象中的b

iOS block并发

iOS block并发 2012-06-13 09:31 1351人阅读 评论(0) 收藏 举报 iosuiviewnetwork任务threadimage 这篇文章转自 http://anxonli.iteye.com/blog/1097777,集中与iOS的多核编程和内存管理,大家完全可以使用苹果的多核编程框架来写出更加responsive的应用. 多核运算 在iOS中concurrency编程的框架就是GCD(Grand Central Dispatch), GCD的使用非常简单.它把任务

(译)IOS block编程指南 1 介绍

Introduction(介绍) Block objects are a C-level syntactic and runtime feature. They are similar to standard C functions, but in addition to executable code they may also contain variable bindings to automatic (stack) or managed (heap) memory. A block ca

ios Block学习

ios block 回调传值,回调事件, 直接上代码 在firstVC里面的tableView 点击方法 ,里面点击跳到另一个nextVC,然后返回后的firstVC后回调值 -(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{ NextViewController *next=[[NextViewController alloc]init]; __block Nex

IOS block 教程&lt;转&gt;

http://pernghh.pixnet.net/blog/trackback/eac87d412e/33563409 本文来自台湾的某开发人员的博客,被墙,感觉讲的比较易懂,所以引过来.文字简体化了,原来是繁体,变数=变量,这个注意一下. 本章学习目标: 1. 了解何谓block. 2. 了解block的使用方法. Block 是iOS在4.0之后新增的程式语法,严格来说block的概念并不算是基础程式设计的范围,对初学者来说也不是很容易了解,但是在iOS SDK 4.0之后,block几乎

iOS Block界面反向传值

在上篇博客 <iOS Block简介> 中,侧重解析了 iOS Block的概念等,本文将侧重于它们在开发中的应用. Block是iOS4.0+ 和Mac OS X 10.6+ 引进的对C语言的扩展,用来实现匿名函数的特性.用维基百科的话来说,Block是Apple Inc.为C.C++以及Objective-C添加的特性,使得这些语言可以用类lambda表达式的语法来创建闭包.关于闭包,一句话解释简洁明了:闭包就是能够读取其它函数内部变量的函数. 在iOS开发中,Block有很多方面的用途,

iOS block 用法

1.定义Block /* 回传void ,参数也是void 的block*/ void (^blockReturningVoidWithVoidArgument)( void ); /* 回传整数,两个参数分别是整数和字元型态的block*/ int   (^blockReturningIntWithIntAndCharArguments)( int , char ); /* 回传void ,含有10 个block 的阵列,每个block 都有一个型态为整数的参数*/ void (^arrayO

iOS block 机制

本文要将block的以下机制,并配合具体代码详细描述: block 与 外部变量 block 的存储域:栈块.堆块.全局块 定义 块与函数类似,只不过是直接定义在另一个函数里,和定义它的那个函数共享同一个范围内的东西. 访问外部变量 堆块内部,栈是红灯区,堆是绿灯区. 根据块的存储位置,可将块分为全局块.栈块.堆块.这里先主要针对堆块讲解. Block不允许修改外部变量的值.Apple这样设计,应该是考虑到了block的特殊性,block也属于"函数"的范畴,变量进入block,实际就

# iOS Block的本质(三)

iOS Block的本质(三) 上一篇文章iOS Block的本质(二)中已经介绍过block变量的捕获,本文继续探寻block的本质. 1. block对对象变量的捕获,ARC 环境 block一般使用过程中都是对对象变量的捕获,那么对象变量的捕获同基本数据类型变量相同吗? 查看一下代码思考:当在block中访问的为对象类型时,对象什么时候会销毁? // ARC环境下代码 typedef void (^Block)(void); int main(int argc, const char *