day7: 类的扩展 NSDate NSDateFormatter Category Extension延展 Protocol协议 delegate代理
2015-08-21 18:23
483 查看
1 掌握NSDate的使⽤
2 掌握NSDateFormatter的使用
3 掌握Category的定义和使用
4 掌握Extension的定义和使用
5 掌握Protocol的定义和使用
6 掌握delegate的使用
内存五个区域对应的单词:
栈区 stack
堆区 heap
静态区 static global
常量区 constant
代码区 code
yy: 年的后2位
yyyy: 完整年
MM: 月,显示为1-12
MMM: 月,显示为英文月份简写,如 Jan
MMMM: 月,显示为英文月份全称,如 Janualy
dd: 日,2位数表示,如02
d: 日,1-2位显示,如 2
EEE: 简写星期几,如Sun
EEEE: 全写星期几,如Sunday
aa: 上下午,AM/PM
H: 时,24小时制,0-23
K: 时,12小时制,0-11
m: 分,1-2位
mm: 分,2位
s: 秒,1-2位
ss: 秒,2位
S: 毫秒
Person.h
Person.m
NSString+SayHi.h
NSString+SayHi.m
NSString+Invert.h
NSString+Invert.m
MarryProtocol.h
Boy.h
Boy.m
Girl.h
Girl.m
man.h
man.m
main.m
2 掌握NSDateFormatter的使用
3 掌握Category的定义和使用
4 掌握Extension的定义和使用
5 掌握Protocol的定义和使用
6 掌握delegate的使用
内存五个区域对应的单词:
栈区 stack
堆区 heap
静态区 static global
常量区 constant
代码区 code
yy: 年的后2位
yyyy: 完整年
MM: 月,显示为1-12
MMM: 月,显示为英文月份简写,如 Jan
MMMM: 月,显示为英文月份全称,如 Janualy
dd: 日,2位数表示,如02
d: 日,1-2位显示,如 2
EEE: 简写星期几,如Sun
EEEE: 全写星期几,如Sunday
aa: 上下午,AM/PM
H: 时,24小时制,0-23
K: 时,12小时制,0-11
m: 分,1-2位
mm: 分,2位
s: 秒,1-2位
ss: 秒,2位
S: 毫秒
Person.h
#import <Foundation/Foundation.h> @interface Person : NSObject -(void)sayHi; @end
Person.m
#import "Person.h" //一个类的延展,现在是对Person类进行延展 //延展类的声明在.m文件里 @interface Person (){ //定义私有变量 NSString * _gender; } -(void)privateTest; @end @implementation Person -(void)sayHi{ NSLog(@" wo jiao person"); //私有方法有可能是我们对外公开方法功能模块的一小部分 [self privateTest]; } -(void)privateTest{ NSLog(@"这是一个私有方法"); } @end
NSString+SayHi.h
#import <Foundation/Foundation.h> @interface NSString (SayHi) -(void)sayHi; @end
NSString+SayHi.m
#import "NSString+SayHi.h" @implementation NSString (SayHi) -(void)sayHi{ NSLog(@"%@ say Hi",self); } @end
NSString+Invert.h
#import <Foundation/Foundation.h> @interface NSArray (Invert) -(void)reverseLogArray; @end
NSString+Invert.m
#import "NSString+Invert.h" @implementation NSArray (Invert) -(void)reverseLogArray{ for (NSInteger i = [self count]-1; i>=0; i--) { NSLog(@"%@",self[i]); } } @end
MarryProtocol.h
#import <Foundation/Foundation.h> @protocol MarryProtocol <NSObject> //默认是required,有它修饰的方法必须实现 @required -(void)makeMoney; -(void)careMe; -(void)cookie; //@optional 有它修饰的实现与否都可以 @optional -(void)doAll; @end
Boy.h
#import <Foundation/Foundation.h> #import "MarryProtocol.h" @interface Boy : NSObject<MarryProtocol> @end
Boy.m
#import "Boy.h" @implementation Boy -(void)makeMoney{ NSLog(@"我会挣钱"); } -(void)careMe{ NSLog(@"我会照顾人"); } -(void)cookie{ NSLog(@"我会做饭"); } -(void)doAll{ NSLog(@"我都会做"); } @end
Girl.h
#import <Foundation/Foundation.h> #import "MarryProtocol.h" //遵循协议语法: @interface Girl : NSObject <MarryProtocol>{ //找一个男朋友 id<MarryProtocol> _boyFrind; } //上班 -(void)doWork; //消费 -(void)shopping; //吃饭 -(void)eat; //撒娇 -(void)coquetry; //感到幸福 -(void)feelHappy; -(void)setBoyFriend:(id<MarryProtocol>)boyFriend; -(id<MarryProtocol>)boyFriend; @end
Girl.m
#import "Girl.h" @implementation Girl -(void)setBoyFriend:(id<MarryProtocol>)boyFriend{ _boyFrind=boyFriend; } -(id<MarryProtocol>)boyFriend{ return _boyFrind; } //上班 -(void)doWork{ NSLog(@"我是UI设计师,我在北京一家公司上班"); } //消费 -(void)shopping{ NSLog(@"我没衣服穿了,想要去优衣库"); [_boyFrind makeMoney]; } //吃饭 -(void)eat{ NSLog(@"我饿了"); [_boyFrind cookie]; } //撒娇 -(void)coquetry{ NSLog(@"我会撒娇"); NSLog(@"受不了你了!"); } //感到幸福 -(void)feelHappy{ NSLog(@"感到稳稳地幸福"); } @end
man.h
#import <Foundation/Foundation.h> #import "MarryProtocol.h" @interface Man : NSObject<MarryProtocol> @end
man.m
#import "man.h" @implementation Man -(void)makeMoney{ NSLog(@"给你100W,花去吧"); } -(void)careMe{ NSLog(@"去我的劳斯莱斯谈谈人生吧"); } -(void)cookie{ NSLog(@"走,去吃满汉全席吧"); } -(void)doAll{ NSLog(@"阿斯蒂芬"); } @end
main.m
#import <Foundation/Foundation.h> #import "NSString+SayHi.h" #import "NSString+Invert.h" #import "Person.h" #import "Girl.h" #import "Boy.h" #import "man.h" int main(int argc, const char * argv[]) { //-----1--NSDate ------- //NSDate的定义 NSDate * nowDate = [NSDate date]; //日期的加减运算 dateByAddingTimeInterval nowDate = [nowDate dateByAddingTimeInterval:8 * 60 * 60]; NSLog(@"nowDate = %@",nowDate); //-----2--NSDateFormatter------- //设置时间格式 时间转换为字符串格式 //NSDateFormatter的定义 NSDateFormatter *df = [[NSDateFormatter alloc]init]; [df setDateFormat:@"dd/MM/yyyy HH:mm:ss "]; NSString *dateStr = [df stringFromDate:nowDate]; NSLog(@"dateStr = %@",dateStr); //NSTimeInterval ⽤以表示以秒为单位的时间间隔,类型为double NSDate * tomorrowDate = [NSDate dateWithTimeIntervalSinceNow:60 * 60 * 24]; NSDate * yesterday = [NSDate dateWithTimeIntervalSinceNow:-60 * 60 * 24]; NSLog(@"%@",tomorrowDate); NSLog(@"%@",yesterday); NSTimeInterval ti = [tomorrowDate timeIntervalSinceDate:yesterday]; NSLog(@"ti = %.f s",ti); /* 计算当前时间和⼀个固定时间的差值,如果差值在60秒内,输出“刚刚”,如果在60秒外3600秒内,输出“xx分钟前”,如果3600秒外,3600*24秒内,输出“xx小时前” */ NSDate * nd = [[NSDate alloc]init]; NSLog(@"nd = %@",nd); NSDate * bd1 = [NSDate dateWithTimeIntervalSinceNow:50]; NSDate * bd2 = [NSDate dateWithTimeIntervalSinceNow:60*25]; NSDate * bd3 = [NSDate dateWithTimeIntervalSinceNow:60*60*25]; NSTimeInterval ti2 = [nd timeIntervalSinceDate:bd1]; NSTimeInterval ti3 = [nd timeIntervalSinceDate:bd2]; NSTimeInterval ti4 = [nd timeIntervalSinceDate:bd3]; NSLog(@"ti3 = %.f",ti3); NSLog(@"ti4 = %.f",ti4); if (ti2<=60) { NSLog(@"刚刚"); }else if (ti2<=3600 && ti2 >60){ NSLog(@"%.f 分钟以内" ,ti2/60); }else if (ti2<=3600*24 && ti2 >3600){ NSLog(@"%.f 小时内 ",ti2/3600); }else{ NSLog(@"%.f 天之外",ti2/(3600*24)); } //字符串转换为NSDate(转换后比原来小8个小时) NSString * dateStr2 = @"2015*08*18_10"; NSDateFormatter * df2 = [[NSDateFormatter alloc]init]; [df2 setDateFormat:@"yyyy*MM*dd_HH-mm-ss"]; //这里格式要和字符串一模一样 //转换 NSDate * date = [df2 dateFromString:dateStr2]; NSLog(@"date = %@",date); //获得当前时区 NSTimeZone * zone1 = [NSTimeZone systemTimeZone]; NSTimeZone * zone2 = [NSTimeZone timeZoneForSecondsFromGMT:8]; NSLog(@"zone1 = %@",zone1); NSLog(@"zone2 = %@",zone2); //获得所有时区 // NSArray * zones = [NSTimeZone knownTimeZoneNames]; // NSLog(@"zones = %@",zones); //设置时区 [df2 setTimeZone:zone1]; NSLog(@"df2 = %@",df2); /* 练习2 定义一个NSDateFormatter,设置合适的格式 将字符串@“2014年05月01日 10点23分18秒”转换为NSDate对象 */ NSString * datestr3 = @"2014年05月01日 10点23分18秒"; NSDateFormatter * df3 = [[NSDateFormatter alloc]init]; [df3 setDateFormat:@"yyyy年MM月dd日 HH点mm分ss秒"]; NSDate * date3 = [df3 dateFromString:datestr3]; NSLog(@"date3 = %@",date3); //-----2--Category 类 类目------- //类的扩展Category 叫分类也叫类目 //主要作用是为没有源代码的类添加方法,对原有类的一个扩展· //通过Category添加的方法会成为原类的一部分 //优点:Category 不能完全替代继承,但能做许多继承做不了的事情,虽然写起来麻烦一点,但是用起来方便横多 //缺点:Category 只能扩展方法、消息,不能扩展字段、变量等。 /* 类和继承的区别 功能:Category 只能为类添加方法,而继承可以添加方法也可以添加实例变量 特点:Category 添加的类会成为原始类的一部分,能被子类继承;继承添加的类只有子类才有,父类不具有; 使用: */ NSString * str1 = @"学辉"; [str1 sayHi]; NSArray *arr1 = @[@"a",@"b",@"c",@"d",@"e",@"r"]; [arr1 reverseLogArray]; //-----3--Extension 延展------- /*Category 和 Extension 的区别 作用:Category为没有源代码的类添加方法,Extension管理类的私有方法 格式:定义一对.h 和 .m Extension把代码写到原始类的.m文件中 */ //创建一个person的实例 Person *p = [[Person alloc]init]; [p sayHi]; //-----4--Protocol 协议(谁遵守,谁实现)------- Girl * girl1 = [[Girl alloc]init]; Boy * boy1 = [[Boy alloc]init]; NSLog(@"girl1 = %@",girl1); NSLog(@"boy1 = %@",boy1); // [boy1 makeMoney]; // [boy2 careMe]; // [boy3 cookie]; // [boy4 doAll]; //-----5--delegate 设计模式----------- //Protocol的核心使用场景是实现delegate设计模式,凡是默写任务自己不去实现,想让别人去实现的时候,就可以指定一个代理,让代理帮去做。只要通知代理去做某事就行。 //现在公司有一个女孩子 Girl * girl2 = [[Girl alloc]init]; [girl2 doWork]; //公司又来了一个男孩子 Boy * boy2 = [[Boy alloc]init]; //这个男孩子对女孩子很好,然后他们在一起了 [girl2 setBoyFriend:boy2]; //当女孩饿了,男孩会给她做饭 [girl2 eat]; //当女孩要去购物了,男孩会给他好多钱 [girl2 shopping]; //当女孩给男孩撒娇的时候 [girl2 coquetry]; //---这个男孩子太。。。了,她终于忍受不了对方,分开了,这时候来了一个成熟稳重的男人,这个男人对她挺好 Man * man = [[Man alloc]init]; [girl2 setBoyFriend:man]; //当女孩饿了,男孩会给她做饭 [girl2 eat]; //当女孩要去购物了,男孩会给他好多钱 [girl2 shopping]; //当女孩给男孩撒娇的时候 [girl2 coquetry]; return 0; }
相关文章推荐
- STL Mutating Algorithms小结
- 带logo图片或不带logo图片的二维码生成与解析,亲测成功
- ZOJ 1045 HangOver
- django csrf
- 利用mod_wsgi部署Django应用
- Hexagon处理器的特殊功能
- leetcode: (13) Roman to Integer
- Django
- 关于googleplay 安装-505错误
- 如何通过PS把LOGO的背景色变透明
- 《The Django Book 2.0》中文版笔记
- 当你在浏览器中输入Google.com并且按下回车之后发生了什么?
- Go学习笔记(2)
- STL Non-mutating Algorithms小结
- HDU-1533 Going Home(二分图匹配)
- 安装 qualcomm_hexagon_sdk
- 【POJ3612】【USACO 2007 Nov Gold】 1.Telephone Wire 动态调节
- VIEWGOOD(远古)多媒体系统在法院项目的应用
- HDU 3966 Aragorn's Story 树链剖分
- django1.8.3搭建博客——2 django web 开发指南阅读笔记