文章目录
  • 块语法与其他变量类似,不同的是,代码块存储的数据是一个函数体。使用代码块时,可以想调用其他标准函数一样,传入参数,并得到返回值
  • 脱字符(^)是块的语法标记,按照参数语法定义返回值以及快主题

    按照调用函数待方式调用块对象变量就可以了:
    int result = myBlock(4)// result = 28
  • 例子
  1. 参数是NSString*的代码块
1
2
3
4
5
6
void (^printBlock)(NSString *x)
printBlock = ^(NSString* str)
{
NSLog(@"print:%@",str);
}
printBlock(@"hello world");
  1. 代码用在字符串数组排序
1
2
3
4
5
6
7
NSArray *stringArray = [NSArray arrayWithObjects:@"abc 1",@"abc2",@"abc 3",@"abc 4",nil];
NSCompartor sortBlock = ^(id string2,id string2)
{
return [string1 compare:string2];
}
NSArray *sortArray = [stringArray sortedArrayUsingComparator:sortBlock];
NSLog(@"sortArray:%@",sortArray);
  1. 代码快的递归调用
1
2
3
4
5
6
7
8
static void(^ const blocks)(int) = ^(int)
{
if(i > 0){
NSLog(@"num:%d",i);
blocks(i - 1);
}
};
blocks(3);
  1. 在代码块中使用局部变量和全局变量
1
2
3
4
5
6
7
8
9
10
11
12
13
14
int global = 1000;
int main(int argc,const char * argv[])
{
@autoreleasepool{
void(^block)(void) = ^(void)
{
global++;
NSLog(@"global:%d",global);
}
block();
NSLog(@"global:%d",global);
}
return 0;
}
文章目录