block的语法
//这一篇是讲给完全搞不懂block是什么意思,还搞不清楚怎么声明赋值调用的.老鸟请翻页.
block从本质上来讲就是一个函数,但是他带有变量的性质, 所以我们可以先这么写
{
NSLog(@"hello");
}
这样就是一个代码块了,但是为了凸显出他是block 所以加一个^标志表示他是block,而且这个时候就把block当做一个函数来看.所以就应该把其看做一个整体而不仅仅是一个代码块,所以后面就应该加一个;
^{
NSLog(@"hello");
};
这个其实就是一个省略返回值,省略参数的block声明. 当然返回值和参数都是void.然后这只是声明,然后当我们要使用他,只需要像使用一个函数一样加个();
(void)^(void){
NSLog(@"hello");
NSLog(@"world");
}();
这个时候控制台就会打印出hello 和world. 这个叫做"匿名无参无返回值block"
而这个时候,这个block就真的只是一个代码块,用完了就要没了,因为我们不可能在另外一个地方写个" ^(); "就要强势调用它,都说是匿名,我们就叫不出他的名字.这个时候就有一个有名字的block的出现啦!
void(^myBlock)(void);
这种就是block的声明了,而且还有名字,这个block的名字叫myBlock 紧接着我们就可以关联上面我们写的那段代码
void(^myBlock)(void);
myBlock = ^{ //或者myBlock = ^(void){
NSLog(@"hello");
NSLog(@"world");
};//注意这个时候已经没有() 因为你总不可能让block等于一个调用的方法吧,
其实到这里,这一步骤就是我们平时对block赋值的常用方法. block就像一个变量一样 声明 赋值 调用同样的三个步骤. 所以不难想象 我们要使用myBlock只需要
myBlock(); //就像你在调用一个函数一样加个小括号
所以这个时候你就可以把block当做一个变量,用来当做函数的参数,返回值等等,这一篇就讲到这里了.