block的概念
- OC在C的基础之上新增了一些数据类型。
BOOL
Boolen
class
nil
SEL
id
block
- block是1个数据类型。
int double float char ......
既然是一个数据类型,那么就可以声明这个数据类型的变量,所以我们完全也可以声明1个block类型的变量
不同类型的变量中可以存储以下数据:- block是一个数据类型,所以我们可以声明1个block类型的变量
- block类型的变量中专门存储1段代码,这段代码可以有参数,可以有返回值。
block的使用
- 无参数,无返回值,声明和定义
//1.无参数,无返回值,声明和定义
void(^MyBlockOne)(void) = ^(void){
NSLog(@"无参数,无返回值");
};
MyBlockOne();//block的调用
- 有参数,无返回值
//2.有参数无返回值
void(^block2)(int a) = ^(int a){
NSLog(@"%d,我就是block,有参数,无返回值",a);
};
block2(10);
- 有参数,有返回值
//3.有参数有返回值
int(^block3)(int,int) = ^(int a,int b){
NSLog(@"%d我就是block,有参数,有返回值",a+b);
return a+b;
};
block3(10,30);
- 无参数有返回值(很少用到)
//4.无参数有返回值(很少用到)
int(^block4)(void) = ^ {
return 45;
};
NSLog(@"%d",block4());
- 在项目中的实际应用
#import <Foundation/Foundation.h>
typedef int (^myBlock)(int a,int b);
@interface Person : NSObject
@property(nonatomic,copy)myBlock myblock1;
- (void)createStoreKitPaymentWithCompletionHandler:(void(^)(int a))completionHandler;
@end
//=================================================================================
#import "Person.h"
@implementation Person
- (void)createStoreKitPaymentWithCompletionHandler:(void(^)(int a))completionHandler
{
NSLog(@"创造a");
completionHandler(2);
}
@end
//=================================================================================
Person *per = [[Person alloc]init];
per.myblock1 = ^int(int a, int b) {
return a+b;
};
NSLog(@"%d",per.myblock1(1,2));
[per createStoreKitPaymentWithCompletionHandler:^(int a) {
NSLog(@"%d",a);
}];