block的概念
- OC在C的基礎(chǔ)之上新增了一些數(shù)據(jù)類型诺凡。
BOOL
Boolen
class
nil
SEL
id
block
- block是1個(gè)數(shù)據(jù)類型忧额。
int double float char ......
既然是一個(gè)數(shù)據(jù)類型污秆,那么就可以聲明這個(gè)數(shù)據(jù)類型的變量筝尾,所以我們完全也可以聲明1個(gè)block類型的變量
不同類型的變量中可以存儲(chǔ)以下數(shù)據(jù):- block是一個(gè)數(shù)據(jù)類型丙唧,所以我們可以聲明1個(gè)block類型的變量
- block類型的變量中專門存儲(chǔ)1段代碼,這段代碼可以有參數(shù)辣之,可以有返回值义图。
block的使用
- 無參數(shù),無返回值召烂,聲明和定義
//1.無參數(shù)碱工,無返回值,聲明和定義
void(^MyBlockOne)(void) = ^(void){
NSLog(@"無參數(shù)奏夫,無返回值");
};
MyBlockOne();//block的調(diào)用
- 有參數(shù)怕篷,無返回值
//2.有參數(shù)無返回值
void(^block2)(int a) = ^(int a){
NSLog(@"%d,我就是block,有參數(shù)酗昼,無返回值",a);
};
block2(10);
- 有參數(shù)廊谓,有返回值
//3.有參數(shù)有返回值
int(^block3)(int,int) = ^(int a,int b){
NSLog(@"%d我就是block,有參數(shù)麻削,有返回值",a+b);
return a+b;
};
block3(10,30);
- 無參數(shù)有返回值(很少用到)
//4.無參數(shù)有返回值(很少用到)
int(^block4)(void) = ^ {
return 45;
};
NSLog(@"%d",block4());
- 在項(xiàng)目中的實(shí)際應(yīng)用
#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(@"創(chuàng)造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);
}];