main
#import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { @autoreleasepool { NSArray* array=@[@1,@2,@3,@4];//[NSNumber numberWithInteger:1] [array enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) { NSLog(@"obj:%@,idx:%lu,stop:%d",obj,idx,*stop); *stop=YES; // *stop // 对遍历的控制,想要让遍历过程停止的时候,将它调成yes就可以了; //block直译区块,它封装了一段代码,可以在任何时候执行,和传统的函数指针类似,可携带参数个返回值 // 返回类型(^block名称)(参数列表) // -int(^Sum)(int,int)=^(int a,int b){ return a+b;}; // -函数指针 int(*Sum)(int,int) // typedef int(^MySum)(int,int); // -MySum sum=^(int a,int b){return a+b}; // 调用block // -int a =Sum(10,11); NSLog(@"%i",a) }]; // block 声明 void(^show)(id)=^(id obj){ NSLog(@"obj%@",obj); }; // block 使用 show(array); // typedef int (^operation)(int,int); operation add=^(int a,int b){ return a+b; }; operation sub=^(int a,int b){ return a-b; }; int sum= add(10,20); NSLog(@"sum=%d",sum); // block 和局部变量的关系 可以访问局部变量 __block int i=10; void(^print)()=^{ i=20; //block 不能修改局部变量 可以修改__block 修饰的变量 NSLog(@"i=%d",i); }; print(); } return 0; }