block块代码,常作为参数传递,如:
NSDictionary *dic = [NSDictionary dictionaryWithObjects:@[@"1",@"2",@"3"] forKeys:@[@"one",@"two",@"three"]];NSString *stopKey = @"two";__block BOOL stopEarly = NO;[dic enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) { NSLog(@"%@,%@",key,obj); //访问对象类型变量 if ([key isEqualToString:stopKey]) { *stop = YES; //访问__block表识的局部类型变量 stopEarly = YES; //直接访问属性 self.name = @"tom"; } }];
注意:
1、块内部可以直接修改局部的对象(如stopKey)或者类的属性;
2、块内部不能直接修改局部的基础类型变量,如bool,int等,如想访问,需要在基础类型声明前加上“__block”关键字,注意,block前是两个下划线;
API中使用到block的地方有:
NSArray的sortedArrayUsingComparator
参考: