1.用typedef声明一个block
①无参数无返回值
typedef void(^Block)(void); @property (nonatomic, copy) Block completeBlock ;
②带参数
typedef void(^HKCompleteBlock)(BOOL completed);
2.用@property声明Block
①无参数无返回值
@property (nonatomic, copy) void (^touchBlock)(void);
②带参数
@property (copy, nonatomic) void (^selectBlock)(NSInteger index);
③带返回值的Block
- (void (^)(int value))add { return ^(int value){ _reslut += value; }; }
④无返回值的Block
// 声明定义 // 返回值(^block变量名)(参数) // block作用:保存一段代码 void (^block)() = ^(){ NSLog(@"调用block"); }; block();
⑤参数使用
- (void)calculator:(int (^)(int result))block { _reslut = block(_reslut); return _reslut; }
其他:
// block定义:三种方式 = ^(参数){}; // 第一种 void(^block1)() = ^{ NSLog(@"调用了block1"); }; // 第二种 如果没有参数,参数可以隐藏,如果有参数,定义的时候,必须要写参数,而且必须要有参数变量名 void(^block2)(int) = ^(int a){ }; // 第三种 block返回可以省略,不管有没有返回值,都可以省略 int(^block3)() = ^int{ return 3; }; // block类型:int(^)(NSString *) int(^block4)(NSString *) = ^(NSString *name){ return 2; };
//代理修饰:
@property (nonatomic, weak) id<MyDelegate> delegate;