标签:style color io os 使用 ar 文件 sp div
block是iOS4.0之后新增的特性,现在我们看案列代码都能够看到block的应用。最普遍的就是用作回调。
void (^block)(void); //这是一个参数void,返回值void的block
void (^block)(int a, char b); //这是一个参数是int和char,返回值void的block
所以记住 ^用来声明一个block
再看几个例子:
1)
int (^block)(int) = ^int(int num) {
return num*3;
};
int a=block(3); //9
2)
int (^block)(int);
block = ^int(int num) {
return num*3;
};
int a=block(3); //9
其实1)等同于2)
1)
int x = 123;
int (^block) (int) =^int(int num){
num = x+num;
return num;
};
int a=block(3); //126
2)注意这个是错误示范int x = 123;
int (^block) (int) =^int(int num){
x = x+num;
return x;
};
3)
__block int x = 123;
int (^block) (int) =^int(int num){
x = x+num;
return x;
};
int a=block(3); //126
2)和3)说明要想修改block之外定义的变量需要加__block
拿案例说明
功能很简单,就是点击按钮触发block,改变Label的文字或背景颜色
1.第一步当然是新建工程,然后在IB中拖几个按钮,链接到不一样的方法,再拖一个UILabel建立与代码的联系,这个大家都懂
2.第二步增加两个文件ChangeColor.h和ChangeColor.m
ChangeColor.h中
typedef void(^GreenColor)(UIColor *colorGreen);
+ (void)ChangeToGreen:(GreenColor)block;
ChangeColor.m中+ (void)ChangeToGreen:(GreenColor)block{
UIColor *color = [UIColor greenColor];
block(color);
}
ViewController.m相应的按钮方法中[ChangeColor ChangeToGreen:^(UIColor *colorGreen) {
label.backgroundColor = colorGreen;
}];
ChangeColor.h中
+ (void)ChangeToBlue:(void(^)(UIColor *colorBlue))block;
+ (void)ChangeToBlue:(void (^)(UIColor *))block{
UIColor *color = [UIColor blueColor];
block(color);
}
ViewController.m相应的按钮方法中
[ChangeColor ChangeToBlue:^(UIColor *colorBlue) {
label.backgroundColor = colorBlue;
}];
案例一和二的区别就在于typedef,先定义了blockChangeColor.h中
+ (void)ChangeToRedAndNewText:(void (^)(UIColor *, NSString *))block{
UIColor *color = [UIColor redColor];
NSString *string = @"xxxxxxx";
block(color,string);
}
ViewController.m相应的按钮方法中
[ChangeColor ChangeToRedAndNewText:^(UIColor *colorRed, NSString *text) {
label.backgroundColor = colorRed;
label.text = text;
}];
案例三和之前两个案例的区别是block的参数两个
ChangeColor.h中
+ (void)ChangeWithText:(NSString *)text CallBlock:(void(^)(UIColor *colorBrown, NSString *newText))block;
+ (void)ChangeWithText:(NSString *)text CallBlock:(void (^)(UIColor *, NSString *))block{
UIColor *color = [UIColor brownColor];
block(color,text);
}
ViewController.m相应的按钮方法中
[ChangeColor ChangeWithText:@"aaaaa" CallBlock:^(UIColor *colorBrown, NSString *newText) {
label.backgroundColor = colorBrown;
label.text = newText;
}];
案列四中的类方法中有一个参数是 ( NSString *)text,另一个就是block。所以在回调中,block可以理解为作为参数在使用。ChangeColor.h中
+ (void)NoChange:(void (^)(void))block;
ChangeColor.m中
+ (void)NoChange:(void (^)(void))block{
block();
}
ViewController.m相应的按钮方法中
[ChangeColor NoChange:^{
NSLog(@"NoChange");
}];
ChangeColor.h中
+ (void)Change:(int (^)(int num))block;
+ (void)Change:(int (^)(int))block{
int a = block(3);
NSLog(@"%d",a);
}
ViewController.m相应的按钮方法中
[ChangeColor Change:^int(int num) {
return num*3;
}];
案例六,执行后会打印9 ,这从一到六的案例只是简单地展示了一下block在回调上的应用
标签:style color io os 使用 ar 文件 sp div
原文地址:http://my.oschina.net/LouWk/blog/325109