在iOS开发中,为了性能和维护更好些,block的使用是一个不可回避的话题。具体使用方法,大同小异。在不同的条件下,定义形式有点差别,为了备忘,总结如下。
1、用 typedef 定义
格式如下:typedef void (^onClick)(int index);
在实现文件直接使用,如:
onClick click = ^(int index) {
ShowLog(@"索引为 %d 的控件被点中。", index);
};
2、直接定义
格式如下:void(^onClick)(int index) = ^(int index) {
ShowLog(@"索引为 %d 的控件被点中。", index);
};
3、作为属性传递
格式如下(注意,一般情况下属性关键词要用 copy 不要用其他关键词): @property(nonatomic, copy) void(^onClick)(int index);
实现文件中实现:
【实例化的对象】.onClick = ^(int index) {
ShowLog(@"索引为 %d 的控件被点中。", index);
};
4、作为参数传递
格式如下(主要区别是 Block 的名称作为方法参数,放在后面,并且整个 block 声明作为参数类型用圆括号括起来):【-或者+】 (void)drawDockBlock:(void(^)(int index)) onClick;
实现文件中实现:
[ 【实例化的对象/或者静态方法的类名称】drawDockBlock:^(int index) {
ShowLog(@"索引为 %d 的控件被点中。", index);
}];
如果有总结不到位的地方,望补充。