Block语法是在iOS4.0的SDK 中开始新增的, 在那时就已经有了超过400多个API使用了Block语法.
Block对象又同样是继承与NSObject, 是C语言级别的语法和运行时特性. 和标准的C函数指针类似. 但其除了可执行语句外, 还可以类似对象可以保持状态数据.
和C语言的函数指针类似, 但不完全相同. 常用来作为回调函数使用.
Block和函数的操作符对比:
函数指针使用的是 ‘*’
Block使用的是 ‘^’
下面是例子:
apple.h文件
#import <Foundation/Foundation.h> @interface apple : NSObject @property (nonatomic, copy) void (^shuiguo1)(void); //定义一个Block, 且参数名为shuiguo1 @property (nonatomic, copy) void (^shuiguo2)(void); @property (nonatomic, copy) void (^shuiguo3)(void); - (void)shuiguo; @end
apple.m文件
#import "apple.h" @implementation apple - (void)shuiguo { if(_shuiguo1) //判断_shuiguo1是否为0 { NSLog(@"我是苹果"); } if(_shuiguo2) { NSLog(@"我是香蕉"); } if(_shuiguo3) { NSLog(@"我是橘子"); } } @end
main函数
#import <Foundation/Foundation.h> #import "apple.h" int main(int argc, const char * argv[]) { @autoreleasepool { apple *app = [[apple alloc]init]; //创建一个app对象 app.shuiguo1 = ^{ //打印一个shuiguo1的Bolck. NSLog(@"我是苹果"); }; app.shuiguo2 = ^{ NSLog(@"我是香蕉"); }; app.shuiguo3 = ^{ NSLog(@"我是橘子"); }; [app shuiguo]; //调用shuiguo的方法 } return 0; }