//// main.m// 代码块//// Created by on 14-10-10.// Copyright (c) 2014年 apple. All rights reserved.//#importint main(int argc, const char * argv[]) { @autoreleasepool { int value = 6;// 定义一个代码块, 注意大括号后面的分号 int (^myBlockFirst)(int number) = ^(int number) { return value * number; };// 使用代码块 NSLog(@"%d", myBlockFirst(7)); // 使用代码块时通常不需要创建一个代码块变量,而是在代码中内联代码块中的内容。// 通常,你会需要一个将代码块作为参数的方法或函数 NSArray *array = [NSArray arrayWithObjects:@"Amir", @"Mishal", @"Irrum", @"Adam", nil]; NSLog(@"Unsorted Array %@", array);// 注意,这里的大括号后面没有分号 NSArray *sortedArray = [array sortedArrayUsingComparator:^(NSString *object1, NSString *object2) { return [object1 compare:object2]; }]; NSLog(@"Sorted Array %@", sortedArray); // 使用typedef定义代码块 typedef double (^sumNumber)(double num1, double num2); sumNumber sumMethod = ^(double num1, double num2) { return num1 + num2; }; NSLog(@"result is %.2f", sumMethod(3, 8)); typedef int (^sumNumber1)(void);// 如果这里不是静态变量,那么下面第二个输出语句依然输出200// 即,a = 20和b = 50没有改变计算出的值// 因为变量是本地的,即局部变量,代码块在定义时复制并保存他们的状态。所以,两次都输出200// 如果将a和b改为static,即全局变量,那么// 第二个就输出1000 int a = 10, b = 20; sumNumber1 sumMethod1 = ^(void){ return a * b; }; NSLog(@"%d", sumMethod1()); a = 20; b = 50; NSLog(@"%d", sumMethod1()); // __block变量// 本地变量会被代码块作为常量获取到。如果想要修改它们的值,必须将他们声明为__block变量// 注意block前面是两个下划线,不是一个 typedef int (^sumNumber3) (int num1, int num2); __block int c = 8; sumNumber3 sumMethod3 = ^(int num1, int num2){ c = num1 + num2; return c; }; NSLog(@"%d", sumMethod3(2, 9)); } return 0;}