block基本使用
#import <Foundation/Foundation.h>
int main00() {
// //block的使用
// void (^print)(void) = ^(void)
// {
// NSLog(@"我正在学习objective C :block");
// };
// print();
// //无返回值无参数
//
// double (^sumD)(double,double) = ^(double a,double b)
// {
// return a+b;
// };
// double sum = sumD(10.4,20.4);
// NSLog(@"%lf",sum);
// //有返回值,有参数
//
// void (^printStr)(NSString*);
// printStr = ^(NSString *str){
// NSLog(@"%@",str);
// };
// //无返回值,有参数
// printStr(@"hahahah");
//注意点
//1.默认局部变量在block中是可以访问的,但是不能修改 2.在执行的过程中block是要使用的局部的值,在定义block的时候就写死了,所以是20,不是45
// int my = 20;
// void (^print)(void) = ^()
// {
// //my = 30;
// NSLog(@"%d",my);
// };
//
// my = 45;
// print();
//解决方法:__block 去修饰这个
__block int my = 20;
void (^print2)() = ^()
{
NSLog(@"%d",my);
my = 30;
NSLog(@"%d",my);
//my = 40;
};
print2();
return 0;
}
block+typedef 复用+回调
<pre name="code" class="objc">#import <Foundation/Foundation.h>
//typedef功能 1.复用block类型 2.使用block做函数参数时使用
typedef void (^FKProcessBlock)(int);
void processArray(int array[],unsigned int len,FKProcessBlock process)
{
for(int i=0;i<len;i++)
{
process(array[i]);
}
}//回调:你调用别人的函数,在别人的函数中引用你自己的函数,你中有我,我中有你
int main()
{
// typedef void (^PrintBlock)(NSString *str);
//
// PrintBlock print = ^(NSString *info)
// {
// NSLog(@"%@",info);
// };
//
// PrintBlock printLoop = ^(NSString *info)
// {
// for(int i=0;i<3;i++)
// {
// NSLog(@"%@",info);
// }
// };
//
// print(@"oc ...");
// printLoop(@"ios");
int arr[] = {2,4,6};
processArray(arr, 3, ^(int num)
{
NSLog(@"%d",num*num);
});
return 0;
}