Block

原创 2015年11月18日 10:35:37
#import <Foundation/Foundation.h>
#import "Person.h"
// 给block起别名
//typedef <#returnType#>(^这写新名字)(<#arguments#>);
int sumValue(int a, int b)
{
return a + b;
}

int resultTwoNumber(int num1, int num2, int (^block)(int a, int b))
{
return block(num1,num2);

};


int main(int argc, const char * argv[]) {

// 回顾 函数指针:指向函数的指针
// 保存的函数地址
// (例)两个数的和的函数

// int (*p)(int a, int b) = NULL;
// p = sumValue;
// // 函数指针调用
// p(3,5);
// printf("%d\n",p(3,5));
//
// Block标志 ^ 托字符(凸起符)
// Block保存的是 有特定功能的函数体
// int(^变量名)(int a,int b) = ^初值(跟前面类型要一致)
// 初值的部分 是一个没有名字的 函数体
// int (^Block)(int a,int b) = ^int (int a,int b){
// return a + b;
// };
// // 打印参数的block OC的
// // 无返回值 void
//
//
// void (^PrintfBlock)(NSString *str) = ^void (NSString *str){
// NSLog(@"%@",str);
// };
//
//// block的调用 直接使用block的名字去调用
// PrintfBlock(@"哈哈");
//

// block类型 NSInteger (^)(NSString *str)
// block名 B
// block的值 匿名的函数 并且类型与Block类型相同
// 匿名函数是函数 其函数中定义的变量 存在栈区
//
// NSInteger (^B)(NSString *str) = ^NSInteger (NSString *str){
//
// return [str intValue];
//
// };
// NSLog(@"%ld",B(@"15"));
//
//
// NSInteger (^block1)(NSInteger a, NSInteger b) = ^NSInteger (NSInteger a,NSInteger b){
//
// return a + b;
//
// };

// block作为参数 体现优势
// 实现 两个数的 加减乘除
// int result = resultTwoNumber(15, 3, ^int(int a, int b)
// {
// return a / b;
//
// });
//
// NSLog(@"%d",result);
// block的好处

// 当把block当做一个参数 传入方法中
// 非常灵活 可以灵活掌控block的实现
// 也就是 你传入的block实现的是什么功能
// 你这个方法 就实现什么功能

// block排序
// NSMutableArray *array = [NSMutableArray arrayWithObjects:@11,@5,@7,@19, nil];
//
// NSNumber *n1 = [NSNumber numberWithInt:11];
// // 语法糖 初始化NSNumber类型方法
// NSNumber *n2 = @11;


// [array sortUsingComparator:^NSComparisonResult(id obj1, id obj2) {
//
//
// // 实现部分 填写 obj1 和obj2 的关系
// // 实现原理: 数组中两个元素进行比较
// // 比较后 返回值 如果前面币后面打则 交换
// // 经此比较到最后一个元素 完成排序
//
// // compare:可以比较的类型
// // 1.字符串类型(NSString *)
// // 2.NSNumber *类型
//
// NSNumber *str1 = (NSNumber *) obj1;
// NSNumber *str2 = (NSNumber *) obj2;
//
// // 利用交换位置来排序
//
// if ([str1 compare:str2] > 0) {
// return NSOrderedDescending;
// }else if ([str1 compare:str2]){
// return NSOrderedSame;
// }else{
// return NSOrderedAscending;
// }
//
// }];
// NSLog(@"%@",array);


// NSMutableArray *array = [NSMutableArray arrayWithObjects:@11,@5,@7,@19, nil];
//
// NSComparisonResult (^MyCopmpare)(id obj1, id obj2) = ^NSComparisonResult (id obj1,id obj2){
// // 先确定类型
// NSNumber *str1 = (NSNumber *)obj1;
// NSNumber *str2 = (NSNumber *)obj2;
//
// if ([str1 compare:str2] > 0) {
// return NSOrderedDescending;
// }else if ([str1 compare:str2]){
// return NSOrderedSame;
// }else{
// return NSOrderedAscending;
// }
//
// };
//
//
//
//
// // 根据类型 确定 升序 还是 降序
//
//
// };
//
//[array sortUsingComparator:MyCopmpare];
//
//
//NSLog(@"%@",array);

// 需要什么类型 咱们就给什么类型 就行

// Person *p1 = [[Person alloc]initWithName:@"wade" age:30];
// Person *p2 = [[Person alloc]initWithName:@"kobe" age:35];
// Person *p3 = [[Person alloc]initWithName:@"durant" age:24];
// Person *p4 = [[Person alloc]initWithName:@"james" age:27];
// Person *p5 = [[Person alloc]initWithName:@"rose" age:23];
// // 初始化可变数组
// NSMutableArray *array = [NSMutableArray arrayWithObjects:p1,p2,p3,p4,p5, nil];
// // 按姓名排序
//
// [array sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2){
// // 先判断类型
// Person *p1 = (Person *)obj1;
// Person *p2 = (Person *)obj2;
// // 姓名 升序排序
//
// if ([[p1 name] compare:[p2 name]] > 0) {
// return NSOrderedDescending;
// } else if([[p1 name] compare:[p2 name]] == 0){
// return NSOrderedSame;
// } else{
// return NSOrderedAscending;
// }
//
// }];
// [array sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) {
// // 先判断类型
// Person *p1 = (Person *)obj1;
// Person *p2 = (Person *)obj2;
// // 再判断排序
// if ([p1 age] > [p2 age]) {
// return NSOrderedDescending;
// } else if([p1 age] == [p2 age]) {
// return NSOrderedSame;
// }else
// return NSOrderedAscending;
// }];
// NSLog(@"%@",array);
//

// // 字面量的使用(语法糖)
// // 切记:字面量使用的初始化方法 是类方法的初始化
// NSArray *array = [NSArray arrayWithObjects:@"1",@"2",nil];
// // 相当于
// NSArray *arrayN = @[@"1",@"2"];
//
// // 取出一个元素
// [arrayN objectAtIndex:0];
// // 相当于
// arrayN[0];
//
// NSNumber *num = [NSNumber numberWithInteger:11];
// // 相当于
// NSNumber *num1 = @11;
//



return 0;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

Objective-c - block作为函数的参数

/* Objective-c - block作为函数的参数       1> block做为一种数据类型,可以做为方法或者函数的参数.       2> 将b...

IBM T400 block diagram pm45.pdf )

  • 2015年06月10日 18:08
  • 939KB
  • 下载

block的一些例子

  • 2014年12月24日 15:34
  • 48KB
  • 下载

NameNode处理上报block块逻辑分析

前言在hadoop集群中,一个datanode执行启动操作后,会在namenode中进行节点的注册,然后namenode会与这个新注册的datanode通过心跳的形式,进行信息的传输,一方面datan...

delegate&amp;block

  • 2015年12月19日 10:45
  • 34KB
  • 下载

nand flash defect block handling schemes

  • 2014年06月06日 09:54
  • 291KB
  • 下载

CSS行高——line-height 文本的垂直居中(display:block;情况下)

初入前端的时候觉得CSS知道display、position、float就可以在布局上游刃有余了,随着以后工作问题层出不穷,才逐渐了解到CSS并不是几个style属性那么简单,最近看了一些关于行高的知...

博客系统block

  • 2013年12月16日 09:31
  • 6.68MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Block
举报原因:
原因补充:

(最多只允许输入30个字)