Block 用法小结

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代码块里的就是可更改的(可读可写),执行代码时取变量最新的值

你可能感兴趣的:(Block 用法小结)