前言:block是从iOS4开始引入的一个新特性,block是对C语言的一个扩展,在Objective-C中完全支持。block在现在的iOS开发中越来越普遍,因为block在使用起来非常强大,简单来说,block就是封装了一组代码语句的对象,可以在任何时间执行。
1、Block简介
Block块是封装工作单元的对象,是可以在任何时间执行的代码段。其本质上是可移植的匿名函数,可以作为方法和函数的参数传入,可以从方法和函数中返回。—(翻译自官方文档)
块是对C语言的一种扩展,它并未作为标准的ANSI C所定义的部分,而是有苹果公司添加到语言中的。块看起来更像是函数,可以给块传递参数,块也可以具有返回值。
2、Block的定义与调用
块是以插入字符^开头,后面的一个括号()内表示块所需要的参数,最后面的大括号{}中是块主体,最后以分号;结束。如下面代码所示:
^(intinputNum){
NSLog(@”printBlock Called!”);
returninputNum;
};
同时,也可以将这个块赋值给一个变量printBlock,声明方式如下。其中,变量printBlock就是指向代码块的指针。
int(^printBlock)(int)=^(intinputNum){
NSLog(@”printBlock Called!”);
returninputNum;
};
当需要调用已经定义的block时,可以使用如下方式,和函数调用十分类似。
inti=printBlock(100);
3、把Block声明为类的属性
由于Block就是一个存储了一段代码的对象,因此,也可以把Block设置为某个类的属性。同时,可以用self.blockProperty来给该属性赋值。
@interfaceViewController()
@property(copy)void(^blockProperty)(void);
@property(copy,nonatomic)void(^blockPropertyWithInput)(int);
@end
-(void)viewDidLoad{
[superviewDidLoad];
//blockProperty
self.blockProperty=^{
NSLog(@”blockProperty is called!”);
};
self.blockProperty();
//blockPropertyWithInput
self.blockPropertyWithInput=^(inti){
NSLog(@”blockPropertyWithInput is Called! I Value is %d”,i);
};
self.blockPropertyWithInput(150);
}