1、//block ,块语法,实质是匿名函数,是对C语言中函数的扩充,扩展;
//block 语法可以用来保存一段代码或者用来调用一段封装好的代码;
//block 语法由于是C语言实现的,所以执行效率特别高;
//block 语法由来,借鉴了函数指针的语法
//block 的数据类型
/*
2、 返回值类型(^)(参数类型1,参数类型2,。。。。);
注意:1.如果要定义的block没有参数,()也不能省掉
2.参数名可以省略,但是参数类型必须保留
3.四种类型:无返无参,。。。等;
3、定义block变量的格式 返回值类型 (^block变量名)(参数类型1,参数类型2,);
void(^myBlock)();
//无返有参的block
void(^myBlock1)(int,int);
//有返无参 int(^myBlock2)();
int(^myBlock2)();
//有返有参 int (^)(int,int);
int (^myBlock3)(int,int);
给block变量赋值的格式:
^(参数类型1,参数名1,参数类型2,参数名2,...)
{ 执行代码;
}
注意: 1.此时参数名不能省略
2.如果block有返回值需要使用return返回数据
3.有大括号需要加分号(;)
5、block的调用
//格式:block变量名(实参1,实参2,...);
//block 赋值的时候block块中代码不执行,只有当block调用的时候block块中的代码才执行
6、例子:写一个有返回值类型的整型,参数为NSString 类型的,实现字符串数字转为整型数据
int (^changeBlock)(NSString *) = ^(NSString * intString){
return [intString intValue];
};
result = changeBlock(@"12333");
NSLog(@"%d",result);
7、给block数据类型起别名
typedef int(^BLOCK3) (int ,int);
BLOCK3 b1 = ^(int a,int b){
return a % b;
};
NSLog(@"%d",b1(3,4));
8、使用block 需要注意的问题
// block块中 可以直接访问,但不能修改
int c = 15;
BLOCK b5 = ^(){
// c ++; error!!!
NSLog(@"%d",c);
};
b5();
//block块中可以直接访问全局变量也能修改全局变量
BLOCK b6 = ^(){
d ++;
NSLog(@"%d",d);
};
b6();
作者:韩俊强 新浪微博:http://weibo.com/2169425833/profile?topnav=1&wvr=6
__block int a = 9;
BLOCK b7 = ^(){
a ++;
NSLog(@"%d",a);
};
b7();
10、block 作为方法的参数
NSArray *numberArr = [NSArray arrayWithObjects:@"1",@"5",@"8",@"3", @"4",nil];
NSArray *sortArr = [numberArr sortedArrayUsingSelector:@selector(compare:)];
NSLog(@"%@",sortArr);
//谁调用这个方法(obj1,obj2)就指这个数组相邻的两个元素
//系统同sortedArrayUsingComparator: 排序时,根据block 参数的返回值NSOrderedDescending所对应的判断情况为准;让相邻的两个元素完成交换
NSArray *sortArr2 = [numberArr sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) {
//NSOrderedDescending、、NSOrderedAscending谁在前就按照谁的规则排序
if ([obj1 intValue] > [obj2 intValue]) {
return NSOrderedDescending;
}else if([obj1 intValue] < [obj2 intValue]){
return NSOrderedAscending;
}else{
return NSOrderedSame;
}
}];
NSLog(@"%@",sortArr2);
==========================================================
//NSNumber的语法糖
NSNumber *intNumber = [NSNumber numberWithInt:100];
NSNumber *intNumber2 = @100;
//不可变字符串的语法糖
NSString *string = @"hanjunqiang";
//可变字符串的语法糖
NSMutableString *mString = @"大爱中华".mutableCopy;//后缀不能丢
//不可变数组的语法糖
NSArray *array = @[@"1",@"2",@"3",@"4"];
NSLog(@"%@",array);
//访问数组元素的语法糖
NSLog(@"%@",array[1]);
//可变数组的语法糖
NSMutableArray *mArray = @[@"1",@"2",@"3",@"4"].mutableCopy;
//字典的语法糖
//字典对象[key值]取出对应的value值
NSDictionary *dict = @{@"a":@"1",@"b":@"2"};//key值在冒号前,value值在冒号后
NSLog(@"%@",dict);
NSLog(@"%@",dict[@"a"]);
//可变字典可以赋值和修改值
NSMutableDictionary *mDic = @{@"a":@"1",@"b":@"2"}.mutableCopy;
mDic[@"a"]=@"100";
NSLog(@"%@",mDic[@"a"]);
转自:http://blog.csdn.net/qq_31810357