#import <Foundation/Foundation.h>
//定义一个块变量类型
typedef void (^FKProcessBlock)(int);
//使用FKProcessBlock定义最后一个参数类型为块
//此方法有三个参数,块是最后一个参数
void processArray1(int array[],unsigned int len,FKProcessBlock process)
{
for(int i=0;i<len;i++)
{
//将数组元素作为参数调用块
process(array[i]);
}
}
void test1(FKProcessBlock testBlock)
{
testBlock(8);
}
int main(int argc, const char * argv[]) {
@autoreleasepool {
//0.
//定义一个数组
int arr[]={2,4,6};
//传入块作为参数调用processArray()函数
processArray1(arr, 3, ^(int num1) {
NSLog(@"元素平方:%d",num1*num1);
});
test1(^(int num) {
NSLog(@"lalalalla");
});
//
// //1.定义不带参数,无返回值的块
// void(^printStr)(void)=^(void)
// {
// NSLog(@"不带参数,无返回值的块");
// };
//
// printStr();
//
//
// //2.定义带参数,有返回值的块
// double(^hypot)(double,double)=^(double num1,double num2)
// {
// return sqrt(num1*num1+num2*num2);
// };
//
// NSLog(@"带参数,有返回值的块:%f",hypot(3, 4));
//
// //3.也可以先只定义块变量:定义带参数,无返回值的块
// void(^print)(NSString *);
// print=^(NSString *string)
// {
// NSLog(@"%@",[NSString stringWithFormat:@"带参数,无返回值的块:%@",string]);
// };
// print(@"顾金跃");
//
//
//
// //4. 块可以访问程序中局部变量的值,但是不允许修改局部变量的值
// //定义局部变量
// int my=24;
// void(^printMy)(void)=^(void)
// {
// //尝试对局部变量赋值,程序将会报错
// //my=25;
//
// //访问局部变量的值是允许的
// NSLog(@"看看局部变量值:%d",my);
// };
//
// //再次修改my的值
// //打印出来发现还是24,这是因为系统在定义块时就会把局部变量的值保存在块中,而不是等到执行时才去访问,获取局部变量的值
// my=25;
// printMy();
//
//
//
// //5.如果不希望在定义块时就把局部变量的值复制到块中,而是等到执行时才去访问,获取局部变量的值,甚至是改变局部变量的值,可以考虑使用__block修饰局部变量
//
// //定义局部变量
// __block int my2=24;
// void(^printMy2)(void)=^(void)
// {
// //尝试对局部变量赋值,程序将会报错
// // my2=25;
//
// //访问局部变量的值是允许的
// NSLog(@"看看局部变量值__block修饰:%d",my2);
// };
//
// //再次修改my的值
// //打印出来发现还是24,这是因为系统在定义块时就会把局部变量的值保存在块中,而不是等到执行时才去访问,获取局部变量的值
// my2=26;
// printMy2();
//
//
// //6.直接把块作为参数传入指定方法
}
return 0;
}
Block基础详解
最新推荐文章于 2023-03-08 16:20:51 发布