iOS OC10_Block
来源:互联网 发布:淘宝店详情图片尺寸 编辑:程序博客网 时间:2024/06/06 07:38
内存五大区域
//栈 int a=10; NSLog(@"%p",a); //堆 int *p=malloc(40); NSLog(@"%p",p); //全局 static int b=10; NSLog(@"%p",b); //常量 char *str="iphone"; NSLog(@"%p",str); //代码区 NSLog(@"%p",maxValue);
结果
2015-07-28 19:07:07.976 OC10_Block[829:71750] 0xa2015-07-28 19:07:07.977 OC10_Block[829:71750] 0x1001068d02015-07-28 19:07:07.977 OC10_Block[829:71750] 0xa2015-07-28 19:07:07.977 OC10_Block[829:71750] 0x100001f75
Block的四种形式
//1.无参数,无返回值 void(^block)()=^(){ //函数大括号里的代码段 NSLog(@"今天有点多云"); }; //block的使用 block(); //block自己不会执行,必须调用才会执行block大括号里的代码段
结果
2015-07-28 19:25:43.452 OC10_Block[1239:82416] 今天有点多云
//2.有参数无返回值void (^block)(int ,int)=^(int a,int b){int max=a > b ? a : b;NSLog(@"%d",max); };//调用block(10,20);//void (^block)(int ,int)是block的类型,它的名是block,我们也通过名进行调用
结果
2015-07-28 19:27:08.121 OC10_Block[1249:82981] 20
//3.有返回值无参数//有返回值在函数段的最后要加上returnint(^block)()=^(){return 100;};//block调用时没有参数也要加上括号NSLog(@"%d",block());
结果
2015-07-28 19:28:07.938 OC10_Block[1256:83327] 100
//4.有参数有返回值 NSString *(^block)(NSArray *,NSInteger)=^(NSArray *arr,NSInteger index){ return arr[index]; }; NSLog(@"%@",block(@[@"1",@"2"],1));
结果
2015-07-28 19:29:05.096 OC10_Block[1263:84049] 2
练习
//返回整数,参数字符串 NSInteger (^block)(NSString *)=^(NSString *str){ return str.integerValue; }; NSLog(@"%ld",block(@"111"));
结果
2015-07-28 19:30:42.921 OC10_Block[1271:85319] 111
//参数日期字符串,返回NSDate类型的日期对象 NSDate *(^block)(NSString *)=^(NSString *str){ NSDateFormatter *formatter=[[NSDateFormatter alloc] init]; [formatter setDateFormat:@"yyyy-MM-dd HH-mm-ss"]; return [formatter dateFromString:str]; }; NSLog(@"%@",block(@"2015-07-28 10:12:12")); //block的函数段中更多使用参数,而返回值更多是调用一方使用
结果
2015-07-28 19:31:33.543 OC10_Block[1278:86117] 2015-07-28 02:12:12 +0000
//通过新的block写一个block Block block=^(NSArray *arr){ return arr[0]; };
//block和局部变量 //__block相当于给a一个在block中修改的权限,否则他只能取值,不能赋值 __block int a=10; void(^block)()=^(){ a=10*a; NSLog(@"%d",a); }; block();
结果
2015-07-28 19:33:14.295 OC10_Block[1301:87551] 100
//通过block对数组进行遍历 NSArray *arr=[NSArray arrayWithObjects:@"1",@"2",@"3",@"4",@"5",@"6", nil]; //系统的block [arr enumerateObjectsUsingBlock:^(NSString * obj, NSUInteger idx, BOOL *stop) { NSLog(@"%@",obj); }]; //系统的block的用法就是回车
结果
2015-07-28 19:33:52.913 OC10_Block[1308:88218] 12015-07-28 19:33:52.914 OC10_Block[1308:88218] 22015-07-28 19:33:52.914 OC10_Block[1308:88218] 32015-07-28 19:33:52.914 OC10_Block[1308:88218] 42015-07-28 19:33:52.915 OC10_Block[1308:88218] 52015-07-28 19:33:52.915 OC10_Block[1308:88218] 6
//数组排序 //数组对字符串的排序 //不可变的数组NSArray*arr=@[@"zhangyangyang",@"wuhe",@"liushansahn",@"wangjunmin",@"yanglin"]; //SEL是方法选择器,他是方法选择器的类型NSArray*newArr[arrsortedArrayUsingSelector:@selector(compare:)];NSLog(@"%@",newArr);NSLog(@"%@",arr);
结果
2015-07-28 19:35:02.000 OC10_Block[1319:89130] ( zhangyangyang, wuhe, liushansahn, wangjunmin, yanglin)
//可变数组NSMutableArray*arr[NSMutableArrayarrayWithObjects:@"zhangyangyang",@"wuhe",@"liushansahn",@"wangjunmin",@"yanglin", nil];[arr sortUsingSelector:@selector(compare:)];NSLog(@"%@",arr);
结果
2015-07-28 19:36:27.541 OC10_Block[1326:90109] ( liushansahn, wangjunmin, wuhe, yanglin, zhangyangyang)
//数组对对象的排序 //新建四个人 Person *per1=[Person baseWithName:@"yanglin" sex:@"nan"]; Person *per2=[Person baseWithName:@"wuhe" sex:@"nan"]; Person *per3=[Person baseWithName:@"cunmou" sex:@"nv"]; Person *per4=[Person baseWithName:@"liushanshan" sex:@"nan"]; //用字面量创建对象和便利构造器是一样的 NSArray *arr=@[per1,per2,per3,per4]; //以学生的姓名作为排序的依据NSArray*newArr[arrsortedArrayUsingComparator:^NSComparisonResult(Person * obj1, Person* obj2) { return -[obj1.name compare:obj2.name]; }]; for (Person *per in newArr) { NSLog(@"%@",per.name); }
结果
2015-07-28 19:37:53.065 OC10_Block[1340:91155] yanglin2015-07-28 19:37:53.066 OC10_Block[1340:91155] wuhe2015-07-28 19:37:53.066 OC10_Block[1340:91155] liushanshan2015-07-28 19:37:53.066 OC10_Block[1340:91155] cunmou
Person *per1=[Person baseWithName:@"yanglin" sex:@"nan"]; Person *per2=[Person baseWithName:@"wuhe" sex:@"nan"]; Person *per3=[Person baseWithName:@"cunmou" sex:@"nv"]; Person *per4=[Person baseWithName:@"liushanshan" sex:@"nan"]; NSMutableArray *marr=[NSMutableArray arrayWithObjects:per1,per2,per3,per4, nil]; [marr sortUsingComparator:^NSComparisonResult(id obj1, id obj2) { Person *per11=(Person *)obj1; Person *per22=(Person *)obj2; return [per11.name compare:per22.name]; }]; for (Person *per in marr) { NSLog(@"%@",per.name); }
结果
2015-07-28 19:38:59.851 OC10_Block[1347:91927] cunmou2015-07-28 19:38:59.852 OC10_Block[1347:91927] liushanshan2015-07-28 19:38:59.852 OC10_Block[1347:91927] wuhe2015-07-28 19:38:59.852 OC10_Block[1347:91927] yanglin
补充
主函数之前
// //C语言的函数// NSInteger maxValue(NSInteger a,NSInteger b){// return a > b ? a : b;// }void test1(){ NSLog(@"今天真热");}int addNum(int a,int b){ return a+b;}typedef int DT;//新的类型写在*的后面,就是这里的PFUNtypedef int (*PFUN)(int ,int ) ;typedef NSString *(^Block)(NSArray *) ;//有返回值,无参数typedef NSInteger(^TestBlock)();
//// BaseModel.h// OC10_Block//// Created by dllo on 15/7/28.// Copyright (c) 2015年 zhozhicheng. All rights reserved.//#import <Foundation/Foundation.h>@interface BaseModel : NSObject@property(nonatomic,copy)NSString *name;@property(nonatomic,copy)NSString *sex;-(id)initWithName:(NSString *)name sex:(NSString *)sex;+(id)baseWithName:(NSString *)name sex:(NSString *)sex;@end
//// BaseModel.m// OC10_Block//// Created by dllo on 15/7/28.// Copyright (c) 2015年 zhozhicheng. All rights reserved.//#import "BaseModel.h"@implementation BaseModel-(id)initWithName:(NSString *)name sex:(NSString *)sex{ self=[super init]; if (self) { self.name=name; self.sex=sex; }return self;}+(id)baseWithName:(NSString *)name sex:(NSString *)sex{ //多态方式完成 id obj =[[[self class] alloc] initWithName:name sex:sex]; return obj;}@end
0 0
- iOS OC10_Block
- OC10_Block
- iOS
- iOS
- IOS
- iOS
- iOS
- IOS
- ios
- iOS
- iOS
- IOS
- iOS
- ios
- ios ~~~~~
- ios
- IOS
- IOS
- web.xml配置详解
- android IntentService 简单介绍
- PHP中isset(变量)和直接判断变量的区别
- Java语言编码规范(Java Code Conventions)
- linux 删除文件里的标点符号
- iOS OC10_Block
- 有关复合的学习
- JAVA学习第十一天
- IOS-1-Objective-C-@property属性的使用及注意问题:@property(assign)int name;
- 获取设备的配置信息
- oracle字符集转换
- PHP Cookies
- HDUOJ 进制转换 题目2031
- HDU 1203 I NEED A OFFER! 最大概率