直接以代码形式来讲block 在oc中基本的使用
#import<Foundation/Foundation.h>
intc = 0;
intmain(intargc, const char * argv[]) {
@autoreleasepool {
//block声明格式:返回值类型(^blaock名字) (形参列表)
int (^myFun)();
//block实现: block 名字= ^(形参列表){};
myFun = ^(){
NSLog(@"这是一个代码块");
return 1;
};
//调用:block名称(实参列表),有返回值的block,可以用一个变量进行接收
intc = 0;
intmain(intargc, const char * argv[]) {
@autoreleasepool {
//block声明格式:返回值类型(^blaock名字) (形参列表)
int (^myFun)();
//block实现: block 名字= ^(形参列表){};
myFun = ^(){
NSLog(@"这是一个代码块");
return 1;
};
//调用:block名称(实参列表),有返回值的block,可以用一个变量进行接收
int a = myFun();//空括号不能少!!
NSLog(@"%d",a);
//有返回值,有形参,声明和实现放一起
int (^myBlock)(inta, int b) = ^(inta, int b){
return 1+b;
};
//调用
int sum = myBlock(10,20);
NSLog(@"%d",sum);
//返回值类型是字符串NSString *(^名字)(形参列表)
NSString *(^myBlock1) (NSString*s) = ^(NSString*s){
NSLog(@"字符串:%@",s);
return s;
};
myBlock1(@"123");
//有一个局部变量,要在block进行值的改变
__block int b = 0;
void (^myBlock2)() = ^(){
b++;
};
//有一个全局变量,在block进行值的改变
void (^myBlock3)() = ^(){
c++;
};
}
return 0;
}
block 作为函数参数
block作为形参使用,在函数中使用block方法运算数据
#import<Foundation/Foundation.h>
//block作为函数的参数
//函数返回值类型 函数名(block的声明格式)
voidfun(int(^bsasa)(inta,intb)){
int sum = bsasa(3,2);
NSLog(@"%d",sum);
}
voidfun1(NSString*(^myBlock)(NSString*s),NSString*s1){
NSLog(@"---%@",myBlock(s1));
}
intmain(intargc, const char * argv[]) {
@autoreleasepool {
//当一个block作为函数的参数是,其返回值类型、形参个数及类型要与函数形参格式保持一致
int (^myBlock) (intc, int d) = ^(inta, int b){
NSLog(@"--%d,%d",a,b);
return a-b;
};
//函数形参是block,调用时,直接传block的名字就行
fun(myBlock);
//调用的另一种方式:内联
//内联block格式:^返回值类型(形参列表){}
fun(^int(inta, int b) {
return a*b;
});
fun1(^NSString*(NSString*s) {
return s;
}, @"123");
}
return 0;
//block作为函数的参数
//函数返回值类型 函数名(block的声明格式)
voidfun(int(^bsasa)(inta,intb)){
int sum = bsasa(3,2);
NSLog(@"%d",sum);
}
voidfun1(NSString*(^myBlock)(NSString*s),NSString*s1){
NSLog(@"---%@",myBlock(s1));
}
intmain(intargc, const char * argv[]) {
@autoreleasepool {
//当一个block作为函数的参数是,其返回值类型、形参个数及类型要与函数形参格式保持一致
int (^myBlock) (intc, int d) = ^(inta, int b){
NSLog(@"--%d,%d",a,b);
return a-b;
};
//函数形参是block,调用时,直接传block的名字就行
fun(myBlock);
//调用的另一种方式:内联
//内联block格式:^返回值类型(形参列表){}
fun(^int(inta, int b) {
return a*b;
});
fun1(^NSString*(NSString*s) {
return s;
}, @"123");
}
return 0;
}
block作为方法的参数
Person.h
#import<Foundation/Foundation.h>
//使用typedef声明block:typedef返回值类型 (^名字)(形参列表)
typedefint (^myblockType)(int a);
@interface Person :NSObject
//block作为方法的参数:(返回值类型 (^)(形参列表))参数名(blcok名字)
-(void)myblock:(int (^)(int a))block;
-(void)sengStr:(NSString *)name andblock:(NSString *(^)(NSString *))myblock1;
-(void)useblockType:(myblockType)sss;
-(void)myname:(NSString *)name;
//使用typedef声明block:typedef返回值类型 (^名字)(形参列表)
typedefint (^myblockType)(int a);
@interface Person :NSObject
//block作为方法的参数:(返回值类型 (^)(形参列表))参数名(blcok名字)
-(void)myblock:(int (^)(int a))block;
-(void)sengStr:(NSString *)name andblock:(NSString *(^)(NSString *))myblock1;
-(void)useblockType:(myblockType)sss;
-(void)myname:(NSString *)name;
@end
Person.m
#import"Person.h"
@implementation Person
-(void)myblock:(int (^)(int))block{
int a = block(10);
NSLog(@"%d",a);
}
-(void)sengStr:(NSString *)name andblock:(NSString *(^)(NSString *))myblock1{
myblock1(name);
}
-(void)useblockType:(myblockType)sss{
int res = sss(10);
NSLog(@"---%d",res);
}
-(void)myname:(NSString *)name{
NSString *str = [namestringByAppendingString:@"+-"];
NSLog(@"%@",str);
}
@implementation Person
-(void)myblock:(int (^)(int))block{
int a = block(10);
NSLog(@"%d",a);
}
-(void)sengStr:(NSString *)name andblock:(NSString *(^)(NSString *))myblock1{
myblock1(name);
}
-(void)useblockType:(myblockType)sss{
int res = sss(10);
NSLog(@"---%d",res);
}
-(void)myname:(NSString *)name{
NSString *str = [namestringByAppendingString:@"+-"];
NSLog(@"%@",str);
}
@end
main.m
#import<Foundation/Foundation.h>
#import"Person.h"
int main(int argc, constchar * argv[]) {
@autoreleasepool {
Person *p = [[Personalloc]init];
[p sengStr:@"尚德"andblock:^NSString *(NSString *s) {
NSLog(@"我在:%@",s);
return s;
}];//内联形式直接实现block、
[p useblockType:^int(int a) {//typedef声明
return a;
#import"Person.h"
int main(int argc, constchar * argv[]) {
@autoreleasepool {
Person *p = [[Personalloc]init];
[p sengStr:@"尚德"andblock:^NSString *(NSString *s) {
NSLog(@"我在:%@",s);
return s;
}];//内联形式直接实现block、
[p useblockType:^int(int a) {//typedef声明
return a;
}];
//传入一个名字,然后进行拼接,名字--;
[p myname:@"aa"];//
[p sengStr:@"aa"andblock:^NSString *(NSString *s) {//
return [sstringByAppendingString:@"--"];
}];
}
return0;
}