很长一段时间没写博客了,这样不好,以前对block的理解不深,后来发现block和函数,其实时有异曲同工的作用, 下面来讲解一下,希望对读者有帮助
在程序中,我们如果有需要预留一段代码,在以后随时调用,可以用函数,也可以用block, 而函数,必须在方法外预先定义,比如main函数之前就定义, 例如:
int func( int a ,int b) { return a + b ; }
int main(){ int c = func(2,4); return 0; }
其中,必须要在main之前就把func定义好,而block不同,在main之内定义即可, 例如
int main(){ int (^block)(int a, int b) = ^(int a,int b){ return a +b; }; block(); return 0; }
此时你是否发现,其实block和函数的调用时一样的,只是,将函数名称换成了^block而已,又如: int (^kkk)() = ^{ return 3 + 55; }; 这其中kkk就相对与函数名 ,而{}相当于函数体,()中没有参数,所以^后的()可以省略。
当然,我们在使用block时,一般在头部分就typedef一下,如下所示:
typedef int MyInt;
typedef int (^MyBlock)(int, int);
void play() { NSLog(@"play mp3"); }
int main(int argc, const char * argv[]) { @autoreleasepool { void (^block)() = ^{ NSLog(@"fhdaskhjfhjdsf"); NSLog(@"fhdaskhjfhjdsf4324"); NSLog(@"fhdaskhjfhjdsf6546"); NSLog(@"fhdaskhjfhjdsf8768"); };
MyBlock sumBlock = ^(int a, int b){
return a + b;
};
MyBlock minusBlock = ^(int a, int b){
return a - b;
};
int (^haha)(int x ,int y) = ^(int x ,int y)
{
return x + y;
};
int k = haha(3,4);
int r = minusBlock(10, 2);
NSLog(@"%d", r);
}
return 0;
}