之前群上一個(gè)人問我block怎么用,他說雖然也工作半年多了,但是很少自己用block巍举,我本想百度一個(gè)demo給他,但發(fā)現(xiàn)居然很少有關(guān)于block吧demo凝垛,所以自己特意簡單寫了一個(gè)懊悯。
先附上代碼:<a >HBBlock</a>
介紹一下主要的幾個(gè)點(diǎn):
1、block的基本使用
/**
* 1梦皮、block內(nèi)部默認(rèn)是不能修改外面的局部變量炭分,但是可以通過_block關(guān)鍵字修飾來改變局部變量
* 2、block內(nèi)部可以改變?nèi)肿兞? */
__block int a = 10;
void (^block1)() = ^{
//block內(nèi)部可以訪問外面的變量
NSLog(@"a = %d",a);
//默認(rèn)情況下,block內(nèi)部不能修改外面的局部變量
//給局部變量加上__block關(guān)鍵字,這個(gè)局部變量就可以在block內(nèi)部修改了
a = 20;
NSLog(@"修改之后a = %d",a);
//默認(rèn)可以對全局變量進(jìn)行修改
NSLog(@"b = %d",++b);
};
block1();
2剑肯、block作為屬性
//block作為屬性實(shí)現(xiàn)
HBBlockClass *class = [[HBBlockClass alloc]init];
//一個(gè)參數(shù)
class.block1 = ^(NSString *str){
NSLog(@"str =%@",str);
};
//兩個(gè)參數(shù)
class.block2 = ^(NSString *str,int a){
NSLog(@"str1 = %@ int = %d",str,a);
};
//實(shí)現(xiàn)方法
[class blockPropertyUse];
3捧毛、block作為方法才參數(shù)
//block作為方法參數(shù)實(shí)現(xiàn)
HBBlockClass *class = [[HBBlockClass alloc]init];
[class method1:^(int a, int b) {
NSLog(@"a = %d b = %d",a,b);
}];
[class parameterA:4 andParameterB:5 andReturn:^(int c) {
NSLog(@"c = %d",c);
}];
4、block作為返回值
//block作為方法的返回值
HBBlockClass *class = [[HBBlockClass alloc]init];
MyBlockReturnUse block = [class getBlock];
block();
5让网、對象類的.h文件
//block作為屬性 第一步
typedef void(^MyBlockPropertyUse)(NSString *string);
typedef void (^MyBlockPropertyUse1)(NSString *str,int a);
//block作為參數(shù) 第一步
typedef void (^MyBlockParameterUse)(int a, int b);
typedef void (^MyBlockParameterUse1)(int c);
//block作為返回值
typedef void (^MyBlockReturnUse)(void);
@interface HBBlockClass : NSObject
//block作為屬性 第二步
@property (nonatomic , strong)MyBlockPropertyUse block1;
@property (nonatomic , strong)MyBlockPropertyUse1 block2;
//block作為屬性
-(void)blockPropertyUse;
//block作為方法的參數(shù) 第二步
-(void)method1:(MyBlockParameterUse)block3;
-(void)parameterA:(int)A andParameterB:(int)B andReturn:(MyBlockParameterUse1)block4;
//block作為返回值
-(MyBlockReturnUse)getBlock;
@end
6呀忧、對象類的.m文件
//block作為屬性
-(void)blockPropertyUse{
self.block1(@"block作為屬性被執(zhí)行了");
self.block2(@"block還加了個(gè)別的東西",5);
NSLog(@"blockPropertyUse方法被調(diào)用了");
}
//block作為方法的參數(shù) 第二步
-(void)method1:(MyBlockParameterUse)block3{
NSLog(@"mothod1被執(zhí)行了");
block3(3,4);//回調(diào)
}
-(void)parameterA:(int)A andParameterB:(int)B andReturn:(MyBlockParameterUse1)block4{
NSLog(@"block作為參數(shù)被執(zhí)行了");
int c = 0;
c = A*B;
//回調(diào)
block4(c);
}
//block作為返回值
-(MyBlockReturnUse)getBlock{
return ^{
NSLog(@"getBlock被調(diào)用了");
};
}
END.