1.Block的定义格式
返回值类型(^block变量名)(形参列表) = ^(形参列表) {};调用Block保存的代码block变量名(实参);
void (^printBlock)() = ^(){
printf("no number");
};
printBlock();
2.基本使用,blcok可以作为参数,传递代码块。
(1)(无参数,无返回值)
@property (nonatomic, copy) void(^myBlock)(); //生成get和set方法
self.myBlock = ^{ //赋值
NSLog(@"hello world");
};
self.myBlock(); //调用
(2) (有参数,有返回值)
@property (nonatomic, copy) NSString *(^myBolckTwo)(NSString *str1, NSString *str2); //生成set和get
weakSelf.myBolckTwo = ^(NSString *str1,NSString *str2){
return [NSString stringWithFormat:@"%@ and %@",str1, str2];
}; //赋值
NSLog(@"%@",weakSelf.myBolckTwo(@"123",@"678")); //调用
3.#define _WEAK_SELF __weak __typeof(&*self)weakSelf = self;
在前面加上这个就可以用weakSelf调用。
4.typedef void(^changeColor)(id);
@property (nonatomic, copy) changeColor backgroundColor;
使用typedef的好处就是可以把block放到model里面,只需要写出block
的get和set方法,然后可以在使用的时候,在通过外面传值来对它进行赋值。
这样就可以在不同的地方进行使用。
换句话说,block也可以看成是一个属性(变量),想什么时候用就赋值,并调用。只不过它包含的是代码块。
Block可以看做是一个变量,因此可以作为OC对象的属性
5. __Blcok 的使用
变量x在Block外定义的,在Block代码块编译的时候,取的x的值为之前的值(不可修改)。
在变量前添加__block关键字进行修饰后,此变量在Block代码块里的就是可更改的(可读可写),执行代码时取变量最新的值
网友评论