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 的神奇之处
通过这个神奇的之处可以造成多线程的效果
————————————————————————————教程结束
这是我第一次写教程,多少有些概念模糊不清,请大家提出来,我会改的,谢谢大家