參考文檔
一咆课、忘記block格式棕孙?
- 樣例一.png
- 樣例二.png
二、Block的定義
1脖律、無(wú)參數(shù)無(wú)返回值
//1浩姥,無(wú)參數(shù),無(wú)返回值状您,聲明和定義
void(^MyBlockOne)(void) = ^(void){
NSLog(@"無(wú)參數(shù)勒叠,無(wú)返回值");
};
MyBlockOne();//block的調(diào)用
2兜挨、有參數(shù)無(wú)返回值
//2,有參數(shù)眯分,無(wú)返回值拌汇,聲明和定義
void(^MyblockTwo)(int a) = ^(int a){
NSLog(@"@ = %d我就是block,有參數(shù)弊决,無(wú)返回值",a);
};
MyblockTwo(100);
3噪舀、有參數(shù)有返回值
//3,有參數(shù)飘诗,有返回值
int(^MyBlockThree)(int,int) = ^(int a,int b){
NSLog(@"%d我就是block与倡,有參數(shù),有返回值",a + b);returna + b;
};
MyBlockThree(12,56);
4昆稿、無(wú)參數(shù)有返回值(很少用到)
//4纺座,無(wú)參數(shù),有返回值
int(^MyblockFour)(void) = ^{NSLog(@"無(wú)參數(shù)溉潭,有返回值");
return45;
};
MyblockFour();
5净响、實(shí)際開發(fā)中常用typedef 定義Block
例如,用typedef定義一個(gè)block:
typedef int (^MyBlock)(int , int);
這時(shí)喳瓣,MyBlock就成為了一種Block類型
在定義類的屬性時(shí)可以這樣:
@property (nonatomic,copy) MyBlock myBlockOne;
使用時(shí):
self.myBlockOne = ^int (int ,int){
//TODO
}
三馋贤、block的使用
1、block作為對(duì)象的屬性
第一步:寫一個(gè)簡(jiǎn)單的block
//寫一個(gè)block inlineblock
void(^LXBlock)() = ^() {
NSLog(@"aa");
};
//調(diào)用這個(gè)block
LXBlock();
第二步:創(chuàng)建一個(gè)Person對(duì)象類畏陕,并創(chuàng)建一個(gè)屬性block
@interface Person : NSObject
/* block : ARC使用strong 非ARC使用copy */
@property (nonatomic, strong) void(^block)();
@end
第三步:創(chuàng)建Person對(duì)象配乓,并將block賦值給他的屬性
Person * p = [[Person alloc]init];
p.block = LXBlock;
第四步:調(diào)用這個(gè)Person對(duì)象的屬性
_per.block();
2、block作為方法的參數(shù)
第一步:接著上面的Person.h類中惠毁,聲明創(chuàng)建eat方法
//參數(shù)是一個(gè)block
//block的返回值:void 參數(shù):NSString * 名字:block
-(void)eat:(void(^)(NSString *))block;
第二步:在Person.m中實(shí)現(xiàn)
-(void)eat:(void (^)(NSString *))block {
block(@"參數(shù)");
}
第三步:調(diào)用
Person * p1 = [[Person alloc]init];
[p1 eat:^(NSString * s) {
NSLog(@"%@",s);
}];
3犹芹、block作為返回值
第一步:在Person.h中聲明run
-(void(^)(int))run;
第二步:在Person.m中實(shí)現(xiàn)
-(void(^)(int))run{
return ^(int m) {
NSLog(@"哥們起來(lái)了!仁讨!== %d",m);
};
}
第三步:調(diào)用
//3.block作為返回值
Person * p = [[Person alloc]init];
p.run(10);
整個(gè)Person類以及調(diào)用
Person.h
#import <Foundation/Foundation.h>
@interface Person : NSObject
/* block : ARC使用strong 非ARC使用copy*/
@property (nonatomic, strong) void(^block)();
-(void)eat:(void(^)(NSString *))block;
-(void(^)(int))run;
@end
Person.m
#import "Person.h"
@implementation Person
-(void)eat:(void (^)(NSString *))block {
block(@"參數(shù)");
}
-(void(^)(int))run{
return ^(int m) {
NSLog(@"哥們起來(lái)了!实昨!== %d",m);
};
}
@end
調(diào)用
- (void)myblock {
//寫一個(gè)block inlineblock
void(^LXBlock)() = ^() {
NSLog(@"aaa");
};
LXBlock();
//1.block作為對(duì)象的屬性
Person * p = [[Person alloc]init];
p.block = LXBlock;
_per = p;
//測(cè)試
_per.block();
}
-(void)myblock_2 {
//2.block作為方法參數(shù)
Person * p1 = [[Person alloc]init];
[p1 eat:^(NSString * s) {
NSLog(@"%@",s);
}];
}
-(void)myblock_3 {
//3.block作為返回值
Person * p = [[Person alloc]init];
p.run(10);
}