全面解析Objective-C中的block代码块的使用

2020-01-14 17:18:34于海丽

运行结果是:print:hello world!
4.2代码用在字符串数组排序
复制代码
        NSArray *stringArray = [NSArray arrayWithObjects:@"abc 1", @"abc 21", @"abc 12",@"abc 13",@"abc 05",nil];
        NSComparator sortBlock = ^(id string1, id string2)
        {
            return [string1 compare:string2];
        };
        NSArray *sortArray = [stringArray sortedArrayUsingComparator:sortBlock];
        NSLog(@"sortArray:%@", sortArray);
运行结果:

 


sortArray:(
  "abc 05",
  "abc 1",
  "abc 12",
  "abc 13",
  "abc 21"
)

4.3代码块的递归调用
代码块想要递归调用,代码块变量必须是全局变量或者是静态变量,这样在程序启动的时候代码块变量就初始化了,可以递归调用

复制代码
        static void (^ const blocks)(int) = ^(int i)
        {
            if (i > 0) {
                NSLog(@"num:%d", i);
                blocks(i - 1);
            }
        };
        blocks(3);
运行打印结果:

 


num:3
num:2
num:1

4.4在代码块中使用局部变量和全局变量
在代码块中可以使用和改变全局变量

复制代码