1.单例
+(BlockData *)share{
static BlockData * blockData=nil;
dispatch_once_t once;
dispatch_once(&once ,^{
blockData=[[BlockData alloc]init];
});
return blockData;
}
2.遍历数组、快速查找
//遍历数组
/*
id obj 表示数组中的元素。
NSUInteger idx 标示元素的下标.
其中将stop设为YES,就跳出循环,不继续遍历了。
*/
[array enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
//对数组中元素的操作
[(UIButton *)obj removeFromSuperview];
}];
//快速查找
NSString * str=@"我是要查找的字符串";
[array enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
if ([obj localizedCaseInsensitiveCompare:str]==NSOrderedSame) {
// 对返回的obj做点别的事情
*stop=YES;
}
}];
3.回调
typedef void (^amountBlock)(int salary);
//模拟公司给员工发奖金
//给指定员工发奖金
-(void)payBonusForStaff:(int)staffId withMoney:(amountBlock)amount{
//参数是int的代码块
amount(5000);//给员工编号为staffId的员工发5000奖金
}
//回调方法
在员工类中现实
1.创建公司类对象 C
2.回调此函数
[C paySalaryForStaff:001 withMoney:^(int salary) {
//员工001领到奖金后的操作
}];
4.递归
static void (^ const blocks)(int) = ^(int i)
{
if (i > 0) {
NSLog(@"num:%d", i);
blocks(i - 1);
}
};
blocks(3);
5.在代码块中使用局部变量
__block int local = 500;//要改变局部变量,需在变量前增加"__"
void(^myblock)(void) = ^(void)
{
local++;
NSLog(@"local:%d", local);
};
myblock();//调用
NSLog(@"local:%d", local);