day7: 类的扩展 NSDate NSDateFormatter Category Extension延展 Protocol协议 delegate代理

 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

#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);

    //获取系统当前的时间戳
    NSDate* dat = [NSDate dateWithTimeIntervalSinceNow:0];
    NSTimeInterval a=[dat timeIntervalSince1970]*1000;
    NSString *timeString = [NSString stringWithFormat:@"%f", a];//转为字符型

    //-----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;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值