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