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;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。

Block从简单到高级的使用,以及项目中经常使用的场景

Block从简单到高级的使用,以及项目中经常使用的场景 一、Block的简单使用        使用Block的三个步骤:1.定义Block变量;2.定义Block(即创建block代码块)3.调用...
  • u014536527
  • u014536527
  • 2015年12月23日 00:03
  • 4543

关于block方法里面套用block实现传值

//之前写关于封装的函数的block传值喜欢这个写法(void)(^)(NSString*str)block作为参数,主要是觉得这样写的话就会减少block全局定义的烦恼,但是在更多的block传值的...
  • georgehenrywilliam
  • georgehenrywilliam
  • 2016年09月19日 18:16
  • 1125

你真的理解__block修饰符的原理么?

开篇自测在本文的开头,提出两个简单的问题,如果你不能从根本上弄懂这两个问题,那么希望你阅读完本文后能有所收获。 为什么block中不能修改普通变量的值? __block的作用就是让变量的值在block...
  • abc649395594
  • abc649395594
  • 2015年07月27日 19:26
  • 9487

iOS block探究(二): 深入理解

你要知道的block都在这里转载请注明出处 http://www.jianshu.com/p/b6a675a7a4fa上一篇文章iOS block探究(一):基础详解介绍了block的基本原理和使用方...
  • u014205968
  • u014205968
  • 2017年03月21日 19:13
  • 716

Linux 磁盘“Block Size”研究

自从开始Linux 软件平台开发,经常遇到“Block Size”。但经常发现此block size非彼block size。意义不一样,大小值也不一样。Open Source的东东有时候也挺烦的。下...
  • wangxiaoqin00007
  • wangxiaoqin00007
  • 2011年07月21日 15:01
  • 3979

编写带有block参数的函数

目前在编写IOS程序的过程中,对于block的使用比较多。一般都是使用iOS写好的API自带的block,但是自己也想写一些block作为参数的函数。如果是在同一个类中,可以异步编写一些代码。如果是在...
  • dfman1978
  • dfman1978
  • 2016年08月10日 15:01
  • 2756

OC block的简单使用

iOS block简单使用
  • itpeng523
  • itpeng523
  • 2014年04月17日 22:16
  • 22822

<block name=“”></block>模版继承

模版继承 模板继承是3.1.2版本添加的一项更加灵活的模板布局方式,模板继承不同于模板布局,甚至来说,应该在模板布局的上层。模板继承其实并不难理解,就好比类的继承一样,模板也可以定义一个基础模板(或...
  • zhangqun23
  • zhangqun23
  • 2016年05月29日 15:35
  • 3569

iOS Block与self的那点事

记得刚接触循环引用的时候经常写这种逗比代码 __weak UIViewController *weakSelf = self; 后来看开源库源码的时候发现了一种比较好的写法 _...
  • capf_Sam
  • capf_Sam
  • 2017年03月09日 15:47
  • 1302

iOS 中的block异常

转自:iOS 知识小集我们在调用block时,如果这个block为nil,则程序会崩溃,报类似于EXC_BAD_ACCESS(code=1, address=0xc)异常【32位下的结果,如果是64位...
  • u011619283
  • u011619283
  • 2016年11月12日 12:14
  • 1743
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Block
举报原因:
原因补充:

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