【iOS开发技术】Block的使用(一)
来源:互联网 发布:南京市网络问政平台 编辑:程序博客网 时间:2024/06/06 07:51
虽然网上关于Block的例子很多很多啊,但是我还是要自己总结一下。
Block是什么
Block : 块
在IOS开发中,Block=代码块.
所有的代码,一段代码都可以称之为一个代码块,不仅仅是在IOS中.
Block有什么用
Block的用处有很多.
我基本都讲Block使用于回调,或者某个公共函数,但是需要执行不同的操作的时候.(例如延迟函数)
Block在IOS开发中有许多的好处,这个可以参阅Apple官方的API
Block的简单使用
Block的调用和声明
在IOS开发中Block的使用
我们使用「^」来声明一个Block对象,下面是一个Block的例子:
void (^myBlock)(void)=^{ NSLog(@"Hello World");};
这是一个很简单的Block的例子。
我们来分解一下几句代码的意思。
void /*表示这个block的返回值*/ (^myBlock)/*myBlock 是申明的这个block的名称*/ (void)/*这个void表示传递进去的参数*/=^{ /*这里是你要执行的代码*/ };
有参数的Block的声明
通过上面这个简单的例子 我们就可以简单的写出一个有参数的的Block,
加入我要写一个 a+b的Block 并且输出
void (^aPlusbBlock)(int,int)=^(int a,int b){ NSLog(@"%d",a+b);};
Block中返回一个值
若是我们的Block需要一个返回值的时候,我们就需要像下面酱紫写
int sum=0;int (^aPlusbBlock)(int,int)=^(int a,int b){ return a+b;};sum=aPlusBlock(1,2);
通过这段代码 我们可以看出 调用一个Block的方法。
在Block中使用变量,以及改变一个变量的值
当我们使用Block以外的变量的时候我们有两种方式去使用
- 将这个变量传递到Block中去使用
- 直接使用Block外面声明的变量
←。 ← 其实我觉得我说了废话。
不过在改变值的时候就会有点不一样了。
传递到Block中的是形参当然是可以改变的,在Block外面的变量如果是想要在Block中操作需要加上 __block 去申明
下面来看一段示例代码:
__block int sum=0;void (^aPlusbBlock)(int,int)=^(int a,int b){ sum=a+b;};
若是在上面这段代码中 我不加 __block 去声明的话是无法操作 sum 变量的
Block的一些技巧、以及注意事项
使用typedef声明一个Block
typedef void (^BoolBlock) (BOOL); /*接受BOOL参数,没有返回值的block */typedef int (^IntBlock) (void);/*没有参数,返回int的block*/typedef BoolBlock (^OtherBlock) (IntBlock);/*从这个Block的定义可以看出,一个Block可以是参数,同时也可以是一个返回值*/
在某个方法中使用Block 作为参数
这里我们需要注意一下 Block参数的申明方式了
上面我们看到一个block的声明如下
void (^aPlusbBlock)(int,int)
但是在当作一个方法的参数使用的时候 我们必须如下书写方式
void (^) (int a, int b) aPlusbBlock
完整的写法就是酱紫
-(void) function:( void (^) (int a, int b) ) aPlusbBlock;
若是你要在一个类里面定义一个Block的property,就需要像下面酱紫定义
@property (nonatomic, copy)BoolBlock block;//这里必须用Copy,这个理由嘛,暂时我也不清楚,可以自己查一下
static修饰的Block
大家知道static可以修饰一个静态变量,静态变量是可以全局调用的,当然Block也是可以的
static int(^maxIntBlock)(int, int) = ^(int a, int b){return a>b?a:b;};
想酱紫,我们就可以定义一个静态的Block了
总结
总结写什么呢 其实没什么好总结的,好像ios开发中鼓励多使用Block以及GCD。文档好像有提到的样子。
Block的简单介绍和使用就到这里。
- 【iOS开发技术】Block的使用(一)
- 【iOS开发技术】Block的使用(二)
- iOS开发 - Block块的使用(一)基础概念
- iOS 之 Block 的使用 (一)
- iOS开发--Block的使用
- IOS Block使用(一)
- iOS开发block(一)
- Ios开发随笔之block(一)
- iOS开发之block(一)
- iOS开发-(^)代码块(block)的使用
- iOS开发 block的简单使用
- iOS开发中Block的使用
- 【iOS开发系列】block的使用
- IOS开发之block的使用
- iOS开发中block的使用
- iOS开发之block的使用
- IOS Block 代码块使用 (一)
- iOS block简介和使用(一)
- 对spark和scala的进一步学习
- 谷歌浏览器如何设置为无图模式
- 【iOS开发技术】将iOS6 原生Navigtaion和Tab 修改的接近iOS7的样式
- 用栈实现计算器
- JSP
- 【iOS开发技术】Block的使用(一)
- 【iOS开发技术】Block的使用(二)
- PHP开发环境搭建
- Codeforces 453A Little Pony and Expected Maximum
- 【iOS开发技术】NSPredicate谓词的用法 数组过滤
- svn报错
- Display XML in a javadoc
- hdu 1060 leftmost
- 迷你播放器--综述