main.m
#import <Foundation/Foundation.h>int main(int argc, const char * argv[]) {
1.函数指针 函数回调 动态排序Block   块语法本质     匿名函数类似     函数指针当做     变量使用四类Block
(1).无参数,无返回值.block1                   block变量void(^)(void)            block类型^void(void){函数体}       block初值(匿名函数)void(^block1)(void) = ^void(void) {NSLog(@“无参数,无返回值”);
};
block调用,类似函数调用.
block1();(2).有参数,无返回值.
参数1:字符串.
参数2:可变数组.
void(^block2)(NSString *, NSMutableArray *) = ^void(NSString *string, NSMutableArray *array) {[array addObject:string];NSLog(@"%@", array);
};
参数传入.
block2(@"Messi", [NSMutableArray array]);(3).无参数,有返回值.
block 初值可以不写返回值类型.(NSInteger可以不写)
NSInteger(^block3)(void) = ^NSInteger(void) {return 100L
}
NSLog(@"%ld", block());(4).有参数,有返回值.
NSMutableDictionary *(^block4)(NSString *, NSMutableArray *) = ^NSMutableDictionary *(NSString *string, NSMutableArray *array) {NSMutableDictionary *dic = [NSMutableDictionary dictionary];[dic setObject:array forKey:string];return dic;
}
NSLog(@"%@", block4(@"Messi", @[@"AA", @"BB"]));

*****注意*****
(1).等号后面的参数,类型和位置必须一致;等号后面的参数一定要有参数名.
(2).如果有返回值,返回值的类型必须一致.    return 0;
}
2.block和变量之间的关系.
NSInteger value = 100L;
void(^blockTest)(void) = ^void(void) {NSLog(@“%ld, %ld“, value, ++a);   // NSLog(“%ld, %@“, value, a); 如果在value前++, 会报错,value = 100L,这样后面就可以在value前++.或者在NSInteger前加static,static NSInteger value = 100L,这样后面就可以在value前++,或者将NSInteger value = 100L写在main之上.
}
blockTest();#import <Foundation/Foundation.h>
// 在main上方写变量了声明.
NSInteger *a = 123;int main(int argc, const char * argv[]) {

3.block重定义的使用.
#import <Foundation/Foundation.h>// block 重定义
typedef void(^BLOCK)(id);int main(int argc, const char * argv[]) {// block重定义的使用.BLOCK blockPrint = ^(id object) {NSLog(%@, object);
};
blockPrint(@[@"messi", @"kaka"]);
}

4.高级排序,block排序
main.m
(1).block排序器
NSArray *arr = @[@"meiss", @"kaka", @"ABC", @"GHJ"];
NSComparator blockCMP = ^(id obj1, id obj2) {// 升序return [obj1 compare:obj2];// 降序return -[obj1 compare:obj2];
};
NSArray *newArr = [arr sortedArrayUsingComparator:blockCMP];
blockPrint(newArr);

结合上面的block重定义的使用方法

(2).排序
NSArray *nnArray = [arr sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) {return -[obj1 compare:obj2];
}];
blockPrint(nnArray);

(3).可变数组
NSMutableArray *mArr = [NSMutableArray arrayWithArray:arr];
[mArr sortUsingComparator:^NSComparisonResult(id obj1, id obj2) {return [obj1 compare:obj2];
}];
blockPrint(mArr);

OC11_Block相关推荐

最新文章

  1. (2) 第二章 WCF服务与数据契约 服务契约详解(二)- 如何引用WCF提供的服务
  2. python基础代码事例-学习笔记:python3,代码。小例子习作(2017)
  3. 百度地图API使用之实现定位
  4. (JavaWeb)HttpServletResponse和HttpServletRequest
  5. 接口,抽象类与内部类
  6. docker-compose.yaml的一些坑(趁我还记得赶快记下来)
  7. java数据结构之排序-- 插入排序算法
  8. 当检测到运动时如何自动打开门灯
  9. linux关闭4750 端口,【ubuntu分享帖】acer 4750G ubuntu安装后的一些设置
  10. 计算机日志研究方法,基于日志的计算机取证技术研究与实现
  11. 模拟image的ajaxPrefilter与ajaxTransport处理
  12. python+django+mysql疫苗预约系统毕业设计毕设开题报告
  13. 计算机硬盘容量1t,硬盘1tb等于多少gb 硬盘容量计算公式
  14. 五款好用的开源CRM系统推荐
  15. 基于51单片机的超声波测距
  16. 星星之火-38:LTE物理层无线资源与帧结构快速入门
  17. python捕获屏幕的标准库_Python标准库urllib2的使用和获取网站状态举例
  18. 基于jquery的bankInput银行卡账号格式化
  19. 用pycharm连接云端服务器
  20. Android 防火墙 知乎,知乎客户端下午瘫痪,都是第三方防火墙变更害的

热门文章

  1. 232/485转以太网单通道串口服务器
  2. 苹果手机怎么定位安卓手机_苹果手机和安卓手机不同使用感受
  3. 监管趋严,在线教育机构要如何做直播呢?
  4. Bacnet IP协议和Java实现
  5. SQL按日期分组销售产品,使用group_concat和separator
  6. [精品毕设] 基于Uniapp+SSM实现的安卓的掌上校园系统
  7. 判断浏览器系统是IOS还是PC还是android
  8. 七牛云存储九折优惠码以及充值图文教程
  9. Redmine配置邮箱
  10. 【转】 SCM工具对比分析