Block————我的最爱

来源:互联网 发布:mac办公软件在哪里 编辑:程序博客网 时间:2024/04/29 11:10

Block 就是一个代码块 类似与方法 可以随时调用

Block可以当做参数,属性等

——————————————————————————————

多说无益,实践才是真理,下面开始来试试Block吧

首先创建一个Block 来说一句 hello world 吧

来运行看看,你会发现说好的hello world没有看不到 怎么回事,哦 原来我们没调用

运行你会发现,在控制台打印了一个hello world 信息

————————————————————————————————————————

在来一个加法运算的Block 来算一算加法

继续创建我们的Block 这次我们让它返回运算的结果




这是一个加法的block 和上面不同的是 它又返回值 而且 等于 后面的内容分开写了,其实这是一个block原型 上面的hello world 是一个简写

我们来运行试试,调用跟上面一样不过要传入2个数字 而且有返回值所以得来个变量接住它


运算结果为3 这是对的,好block 的 简介就先这样,我们来详细的剥削

就拿这句代码说事吧

int (^ addnumber)(int a,int b);

从头开始 , int 这个就不用说了吧 就是它的返回值

(^addnumber) Block名 相当于函数名 不过需要加个括号和在开始的时候加个 ^ 符号

(int a, int b) 需要传进来的参数 跟函数的参数是一样的 只是要加一个括号 就算你没有参数这个括号也是不可省略的

做了以上几步后就完成了一个Block 的声明 当然了 Block 是代码块 说好的代码块呢,聪明的人应该已经知道了,不聪明的人我说下你也应该知道了

addnumber = ^(int a,int b)

        {

            return a + b;

        };

这就是一个代码块 也是从头开始解析

首先 addnumber 应该不用我说了吧 你函数返回一个值你也得哪个变量接住 就是这个道理

等于后面的 其实就是你声明的 Block 的参数 必须对应上而且前面得加^括号 然后一个 大括号 在return 回去就完成了一个Block的完整声明

应该有人会问,为什么上面的hello world跟下面不同

首先你会注意到2个问题

1.它没有参数

2.它的block快是直接跟在声明后面,而且只有一个^ 没有括号

解答

1.Block跟函数一样可以没有参数但是括号不能少

2.前面说了它没有参数所以我们创建的时候可以简写成 只有一个 ^ 符号 而且括号也可以省略 当然你不省略也可以,直接跟在后面也是简写方式,2种都可以这个看个人喜好了

———————————————————————————————————————————————————

Block 块里面跟函数一样可以在里面进行许多操作,重点是它可以声明成 属性,实例变量,当做参数,这代表什么,这代表我们可以用它来传值,而且这个传值比通知、代理方便快捷多了。

下面我们就来看看。

首先创建一个类

在声明一个Block 注意这里声明用 用 typedef 

因为我们是传值所以不需要返回值,而且传的是字符串所以参数就字符串,这里你想传多少个值就用多少个参数就行了

在声明实例变量 和 方法 就可以了 下面是 .h文件的代码

征服了 .h 下面转战 .m

首先在 .m 实现这个方法就行了

一下是代码截图


Block也有自己的内存管理

注意我注释掉的代码,使用非ARC的同学请使用注释掉的2行代码并且在delloc里面也要release,使用ARC的只需要 等于 就行了

然后我们在调用Block 把传进来的字符串 返回回去,这里你会发现Block 适用于反向传值 好了我们来看看怎么使用吧

首先得创建对象 这个不用对说了吧

这里会发现神奇的一幕

按下回车键你发现了看看你发现了什么

很神奇是吧 变成了这样 这里就是代码块了 在这里面就可以处理你接受到的值,注意在最后面用[]括起来并加上分号

然后我们在代码块里面调试一下 str 看看有什么

在这里你会发现我们传进去的 heelo(好吧我英文不好) 被返回过来了,这就是Block 的神奇之处

通过这个神奇的之处可以造成多线程的效果

————————————————————————————教程结束

这是我第一次写教程,多少有些概念模糊不清,请大家提出来,我会改的,谢谢大家


0 0