入手环信,代码块知识点用的多,发帖回顾下
#import
int c = 0;
int main(int argc, const char * argv[]) {
@autoreleasepool {
//block声明格式:返回值类型 (^blaock名字) (形参列表)
int (^myFun)();
//block实现: block 名字 = ^(形参列表){};
myFun = ^(){
NSLog(@"这是一个代码块");
return 1;
};
//调用:block名称(实参列表),有返回值的block,可以用一个变量进行接收
int a = myFun();//空括号不能少!!
NSLog(@"%d",a);
//有返回值,有形参,声明和实现放一起
int (^myBlock)(int a, int b) = ^(int a, 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
//block作为函数的参数
//函数返回值类型 函数名(block的声明格式)
void fun(int (^bsasa)(int a,int b)){
int sum = bsasa(3,2);
NSLog(@"%d",sum);
}
void fun1(NSString *(^myBlock)(NSString *s),NSString *s1){
NSLog(@"---%@",myBlock(s1));
}
int main(int argc, const char * argv[]) {
@autoreleasepool {
//当一个block作为函数的参数是,其返回值类型、形参个数及类型要与函数形参格式保持一致
int (^myBlock) (int c, int d) = ^(int a, int b){
NSLog(@"--%d,%d",a,b);
return a-b;
};
//函数形参是block,调用时,直接传block的名字就行
fun(myBlock);
//调用的另一种方式:内联
//内联block格式:^返回值类型 (形参列表){}
fun(^int(int a, int b) {
return a*b;
});
fun1(^NSString *(NSString *s) {
return s;
}, @"123");
}
return 0;
}
block作为方法的参数
Person.h
#import
//使用typedef声明block:typedef 返回值类型 (^名字)(形参列表)
typedef int (^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 = [name stringByAppendingString:@"+-"];
NSLog(@"%@",str);
}
@end
main.m
#import
#import "Person.h"
int main(int argc, const char * argv[]) {
@autoreleasepool {
Person *p = [[Person alloc] 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 [s stringByAppendingString:@"--"];
}];
}
return 0;
}