oc NSDate / Category类目 / 延展
2015-08-22 09:53
507 查看
#import <Foundation/Foundation.h>
#import "NSString+sayHi.h"
#import "NSDate+dateWithString.h"
#import "person.h"
#import "Girl.h"
#import "Boy.h"
#import "Man.h"
#import "NSObject+CategoryTrain.h"
int main(int argc, const char * argv[]) {
@autoreleasepool {
#pragma mark ----- NSDate -------
//获取当前时间--为格林时间 0时区。
NSDate *date=[NSDate date];
NSLog(@"%@",date);
//
NSTimeZone *zone=[NSTimeZone localTimeZone];
NSLog(@"%@",zone);
//偏移时间 接收的时区和格林时间的相差的秒数
NSInteger offset=[zone secondsFromGMT];
NSLog(@"%lu",offset);
//实时打印当前时间-补时差offset
NSDate *nowTime=[[NSDate alloc]initWithTimeIntervalSinceNow:offset];
NSLog(@"%@",nowTime);
//明天的时间--定闹钟等应用
NSDate *date1=[NSDate dateWithTimeIntervalSinceNow:24*3600+offset];
NSLog(@"%@",date1);
//以2001-1-1 00:00:00为参考时间
NSDate *date2=[NSDate dateWithTimeIntervalSinceReferenceDate:24*3699+offset];
NSLog(@"%@",date2);
//以1970-1-1 00:00:00为参考时间
NSDate *date3=[NSDate dateWithTimeIntervalSince1970:0];
NSLog(@"%@",date3);
//时间戳--某个日期到现在 00:00:00为参考时间的时间间隔
NSTimeInterval interval=[nowTime timeIntervalSinceNow];
NSLog(@"%f",interval/(24*3600*365));
NSTimeInterval interval1=[nowTime timeIntervalSince1970];
NSLog(@"%f",interval1/(24*3600*365));
NSLog(@"%d",2015-1970);
//日期格式化--设置日期格式
NSDateFormatter *formatter=[[NSDateFormatter alloc]init];
//将日期对象转换成字符串对象显示
[formatter setDateFormat:@"yyyy-MM-dd hh:mm:ss EEEE MMMM zzzzz qqq VVVV"];
NSString *formaterTime= [formatter stringFromDate:nowTime];
NSLog(@"formattr:%@",formaterTime);
[formatter setDateFormat:@"yyyy年MM月dd日 hh:mm:ss"];
NSString *form=[formatter stringFromDate:nowTime];
NSLog(@"%@",form);
//
#pragma mark -------类的扩展 Category----------------
//一般是对系统类的扩展
//对NSString
NSString *str=@"挺好";
[str sayHello];
[NSString sayWhat];
//类目:定义的方法是属于类目的,有实例方法和类方法,并且,要注意的是,不能和类中原有的方法重名,否则后果自付。突然想到可以自己慢慢去探索类中本来的方法,用重写,如果实现不了就删了就可以了。
//类目中只能添加方法。
//类目中的方法也可以被继承。
//声明和实现。
//把string类型转换成NSDate
// NSString *day=@"20150822120256";
NSString *day=@"20150821";
NSDate *dd=[[NSDate alloc]init];
//为什么输出会少时间,是因为格林时间为标准,会减去相应的时间间隔。
dd=[NSDate stringIntoDate:day];
NSLog(@"转换后:%@",dd);
// 为了更好的理解 类目中的方法也可以被继承。
NSObject *obj=[[NSObject alloc]init];
[obj sayWhat];
//Girl类是继承自NSObject类,看NSObject类的扩展方法sayWhat,Girl类是不是也继承下来了?。
Girl *girlHey=[[Girl alloc]init];
[girlHey sayWhat];
//由此可见真的是可以继承下来的。
//重写NSObject中原有类init后的后果。
// Girl *girlNoZuoNoDie=[[Girl alloc]init];
// NSLog(@"重写NSObject原有类init方法后:%@",girlNoZuoNoDie);
#pragma mark -----类的延展 --------------
person *p=[[person alloc]initWithName:@"瞌睡虫"];
[p setName:@"jiji"];
[p name];
//代理开始
Girl *agirl=[[Girl alloc]initWithName:@"" :0 ];
[agirl setAge:18];
Boy *aboy=[[Boy alloc]initWithName:@"王二牛" :23];
[agirl setAge:24];
[aboy setAge:27];
//设置代理
[agirl setDelegator:aboy];
//
[agirl wantToEat];
[agirl wantMoney];
[agirl wantToBuyHouse];
// [agirl wantToBuyCar];
[agirl setAge:31];
[aboy setAge:35];
//Man类
Man *man=[[Man alloc]initWithName:@"呵呵" :33];
// 狮子
// ,%%%%%%%%,
// ,%%/\%%%%/\%%
// ,%%%\c "" J/%%%
// %. %%%%/ o o \%%%
// `%%. %%%% _ |%%%
// `%% `%%%%(__Y__)%%'
// // ;%%%%`\-/%%%'
// (( / `%%%%%%%'
// \\ .' |
// \\ / \ | |
// \\/ ) | |
// \ /_ | |__
// (___________)))))))
//
[agirl setDelegator:man];
[agirl wantToEat];
}
return 0;
}
==================================================================
#import <Foundation/Foundation.h>
#import "MarryProtocol.h"
@interface Girl : NSObject
{
NSString *_name;
NSInteger _age;
id <MarryProtocol> _delegator;//定义遵循的协议实例对象。id是任意类型的,也就是说可以授权给任意类型的对象。<遵循的协议类>
}
//声明getter和setter方法。
-(void)setDelegator:(id<MarryProtocol>)husband;
-(id<MarryProtocol>)delegator;
//
+(id)girlName:(NSString*)name :(NSInteger)age;
-(id)initWithName:(NSString*)name :(NSInteger)age;
-(void)setAge:(NSInteger)age;
-(id)name;
-(NSInteger)age;
-(NSString *)description;
/////////////////////////////////////////////////////授权者自身行为
-(void)wantToEat;
-(void)wantToWash;
-(void)wantMoney;
-(void)wantToLookAfterKid;
-(void)wantToBuyHouse;
-(void)wantToBuyCar;
@end
==================================================================
#import "Girl.h"
@implementation Girl
//实现代理的getter和setter方法。
-(void)setDelegator:(id<MarryProtocol>)husband{
_delegator=husband;
}
-(id<MarryProtocol>)delegator{
return _delegator;
}
//把规定在协议里的条例交给代理商做。
-(void)wantToEat{
[_delegator cook];
}
-(void)wantToWash{
[_delegator wash];
}
-(void)wantMoney{
[_delegator makeMoney];
}
-(void)wantToLookAfterKid{
[_delegator kid];
}
-(void)wantToBuyHouse{
[_delegator buyHouse];
}
-(void)wantToBuyCar{
[_delegator buyCar];
}
+(id)girlName:(NSString*)name :(NSInteger)age{
Girl *girl=[[Girl alloc]initWithName:name :age ];
return girl;
}
-(id)initWithName:(NSString*)name :(NSInteger)age{
self=[super init];
if (self) {
_name=name;
_age=age;
}
return self;
}
-(void)setAge:(NSInteger)age{
_age=age;
}
-(id)name{
return _name;
}
-(NSInteger)age{
return _age;
}
-(NSString *)description{
return [NSString stringWithFormat:@"%@,%ld",_name,_age];
}
@end
========================================================
#import <Foundation/Foundation.h>
#import "MarryProtocol.h"
//遵循的协议
@interface Boy : NSObject<MarryProtocol>
{
NSString *_name;
NSInteger _age;
}
+(id)boyName:(NSString*)name :(NSInteger)age;
-(id)initWithName:(NSString*)name :(NSInteger)age;
-(void)setAge:(NSInteger)age;
-(id)name;
-(NSInteger)age;
-(NSString *)description;
@end
=========================================================
#import "Boy.h"
@implementation Boy
//实现协议里规定的条例--@required是必须实现的。
-(void)wash{
NSLog(@"从此我洗衣");
}
-(void)cook{
NSLog(@"我做饭");
}
-(void)makeMoney{
NSLog(@"我挣钱.");
}
-(void)kid{
NSLog(@"我照看孩子");
}
-(void)buyHouse{
NSLog(@"我还买不起房子,但是我会努力的。");
}
//
+(id)boyName:(NSString*)name :(NSInteger)age{
Boy *boy=[[Boy alloc]initWithName:name :age ];
return boy;
}
-(id)initWithName:(NSString*)name :(NSInteger)age{
self=[super init];
if (self) {
_name=name;
_age=age;
}
return self;
}
-(void)setAge:(NSInteger)age{
_age=age;
}
-(id)name{
return _name;
}
-(NSInteger)age{
return _age;
}
-(NSString *)description{
return [NSString stringWithFormat:@"%@,%ld",_name,_age];
}
@end
=========================================================
// MarryProtocol.h 协议内容规定如下 ,只有.h文件
#import <Foundation/Foundation.h>
@protocol MarryProtocol <NSObject>
//必须得======默认
@required
-(void)wash;
-(void)cook;
-(void)makeMoney;
-(void)kid;
//可选择性的
@optional
-(void)buyHouse;
-(void)buyCar;
@end
==========================================================
#import <Foundation/Foundation.h>
@interface person : NSObject
{
NSString *_name;
}
-(id)initWithName:(NSString*)name;
-(void)setName:(NSString*)name;
-(id)name;
@end
===========================================================
#import "person.h"
//延展是对自己写的类的延展,在一个你需要延展的类的.m文件中写延展。
//这一块叫延展。延展部分只有声明。
//延展开始标志
@interface person () //person延展的类名
{
NSInteger _age;
//延展可以增加实例变量,但是只能在类内访问。
}
-(void)introduce:(NSInteger)age;
//延展结束标志
@end
@implementation person
-(void)introduce:(NSInteger)age{
_age=age;
NSLog(@"我是新延展的方法-姓名:%ld,%@",_age,_name);
}
-(id)initWithName:(NSString*)name{
self=[super init];
if (self) {
_name=name;
}
return self;
}
-(void)setName:(NSString*)name{
_name=name;
}
-(id)name{
person *p=[[person alloc]initWithName:@"pp"];
_age=18;
//延展只能在类内访问。--封装的思想。就是不能告诉外人,只能跟内人分享。
[p introduce:_age];
return _name;
}
@end
==================================================================
//
// NSObject+CategoryTrain.h //类目文件格式---类目是扩展封装类(接口)。且在类目中写的方法能被子类继承。不要重写类中原有方法。
#import <Foundation/Foundation.h>
@interface NSObject (CategoryTrain)
//NSObject中有init方法,我在这重写一下,看对之后有什么影响。
//-(id)init;
-(void)sayWhat;
@end
=========================================================
#import "NSObject+CategoryTrain.h"
@implementation NSObject (CategoryTrain)
-(void)sayWhat{
NSLog(@"我是对NSObject类的扩展");
}
//重写init
//-(id)init{
// NSString *_name=@"bella";
// return _name;
//}
@end
============================================================
#import <Foundation/Foundation.h>
@interface NSDate (dateWithString)
+(NSDate *)stringIntoDate:(NSString*)string;
@end
============================================================
#import "NSDate+dateWithString.h"
@implementation NSDate (dateWithString)
+(NSDate *)stringIntoDate:(NSString*)string{
NSDateFormatter *date=[[NSDateFormatter alloc]init];
// [date setDateFormat:@"yyyyMMddhhmmss"];
[date setDateFormat:@"yyyy-MM-dd hh:mm:ss"];
// NSDate *day=[date stringFromDate:string];
NSDate *day=[date dateFromString:string];
return day;
}
@end
=====================================================
#import "NSString+sayHi.h"
#import "NSDate+dateWithString.h"
#import "person.h"
#import "Girl.h"
#import "Boy.h"
#import "Man.h"
#import "NSObject+CategoryTrain.h"
int main(int argc, const char * argv[]) {
@autoreleasepool {
#pragma mark ----- NSDate -------
//获取当前时间--为格林时间 0时区。
NSDate *date=[NSDate date];
NSLog(@"%@",date);
//
NSTimeZone *zone=[NSTimeZone localTimeZone];
NSLog(@"%@",zone);
//偏移时间 接收的时区和格林时间的相差的秒数
NSInteger offset=[zone secondsFromGMT];
NSLog(@"%lu",offset);
//实时打印当前时间-补时差offset
NSDate *nowTime=[[NSDate alloc]initWithTimeIntervalSinceNow:offset];
NSLog(@"%@",nowTime);
//明天的时间--定闹钟等应用
NSDate *date1=[NSDate dateWithTimeIntervalSinceNow:24*3600+offset];
NSLog(@"%@",date1);
//以2001-1-1 00:00:00为参考时间
NSDate *date2=[NSDate dateWithTimeIntervalSinceReferenceDate:24*3699+offset];
NSLog(@"%@",date2);
//以1970-1-1 00:00:00为参考时间
NSDate *date3=[NSDate dateWithTimeIntervalSince1970:0];
NSLog(@"%@",date3);
//时间戳--某个日期到现在 00:00:00为参考时间的时间间隔
NSTimeInterval interval=[nowTime timeIntervalSinceNow];
NSLog(@"%f",interval/(24*3600*365));
NSTimeInterval interval1=[nowTime timeIntervalSince1970];
NSLog(@"%f",interval1/(24*3600*365));
NSLog(@"%d",2015-1970);
//日期格式化--设置日期格式
NSDateFormatter *formatter=[[NSDateFormatter alloc]init];
//将日期对象转换成字符串对象显示
[formatter setDateFormat:@"yyyy-MM-dd hh:mm:ss EEEE MMMM zzzzz qqq VVVV"];
NSString *formaterTime= [formatter stringFromDate:nowTime];
NSLog(@"formattr:%@",formaterTime);
[formatter setDateFormat:@"yyyy年MM月dd日 hh:mm:ss"];
NSString *form=[formatter stringFromDate:nowTime];
NSLog(@"%@",form);
//
#pragma mark -------类的扩展 Category----------------
//一般是对系统类的扩展
//对NSString
NSString *str=@"挺好";
[str sayHello];
[NSString sayWhat];
//类目:定义的方法是属于类目的,有实例方法和类方法,并且,要注意的是,不能和类中原有的方法重名,否则后果自付。突然想到可以自己慢慢去探索类中本来的方法,用重写,如果实现不了就删了就可以了。
//类目中只能添加方法。
//类目中的方法也可以被继承。
//声明和实现。
//把string类型转换成NSDate
// NSString *day=@"20150822120256";
NSString *day=@"20150821";
NSDate *dd=[[NSDate alloc]init];
//为什么输出会少时间,是因为格林时间为标准,会减去相应的时间间隔。
dd=[NSDate stringIntoDate:day];
NSLog(@"转换后:%@",dd);
// 为了更好的理解 类目中的方法也可以被继承。
NSObject *obj=[[NSObject alloc]init];
[obj sayWhat];
//Girl类是继承自NSObject类,看NSObject类的扩展方法sayWhat,Girl类是不是也继承下来了?。
Girl *girlHey=[[Girl alloc]init];
[girlHey sayWhat];
//由此可见真的是可以继承下来的。
//重写NSObject中原有类init后的后果。
// Girl *girlNoZuoNoDie=[[Girl alloc]init];
// NSLog(@"重写NSObject原有类init方法后:%@",girlNoZuoNoDie);
#pragma mark -----类的延展 --------------
person *p=[[person alloc]initWithName:@"瞌睡虫"];
[p setName:@"jiji"];
[p name];
//代理开始
Girl *agirl=[[Girl alloc]initWithName:@"" :0 ];
[agirl setAge:18];
Boy *aboy=[[Boy alloc]initWithName:@"王二牛" :23];
[agirl setAge:24];
[aboy setAge:27];
//设置代理
[agirl setDelegator:aboy];
//
[agirl wantToEat];
[agirl wantMoney];
[agirl wantToBuyHouse];
// [agirl wantToBuyCar];
[agirl setAge:31];
[aboy setAge:35];
//Man类
Man *man=[[Man alloc]initWithName:@"呵呵" :33];
// 狮子
// ,%%%%%%%%,
// ,%%/\%%%%/\%%
// ,%%%\c "" J/%%%
// %. %%%%/ o o \%%%
// `%%. %%%% _ |%%%
// `%% `%%%%(__Y__)%%'
// // ;%%%%`\-/%%%'
// (( / `%%%%%%%'
// \\ .' |
// \\ / \ | |
// \\/ ) | |
// \ /_ | |__
// (___________)))))))
//
[agirl setDelegator:man];
[agirl wantToEat];
}
return 0;
}
==================================================================
#import <Foundation/Foundation.h>
#import "MarryProtocol.h"
@interface Girl : NSObject
{
NSString *_name;
NSInteger _age;
id <MarryProtocol> _delegator;//定义遵循的协议实例对象。id是任意类型的,也就是说可以授权给任意类型的对象。<遵循的协议类>
}
//声明getter和setter方法。
-(void)setDelegator:(id<MarryProtocol>)husband;
-(id<MarryProtocol>)delegator;
//
+(id)girlName:(NSString*)name :(NSInteger)age;
-(id)initWithName:(NSString*)name :(NSInteger)age;
-(void)setAge:(NSInteger)age;
-(id)name;
-(NSInteger)age;
-(NSString *)description;
/////////////////////////////////////////////////////授权者自身行为
-(void)wantToEat;
-(void)wantToWash;
-(void)wantMoney;
-(void)wantToLookAfterKid;
-(void)wantToBuyHouse;
-(void)wantToBuyCar;
@end
==================================================================
#import "Girl.h"
@implementation Girl
//实现代理的getter和setter方法。
-(void)setDelegator:(id<MarryProtocol>)husband{
_delegator=husband;
}
-(id<MarryProtocol>)delegator{
return _delegator;
}
//把规定在协议里的条例交给代理商做。
-(void)wantToEat{
[_delegator cook];
}
-(void)wantToWash{
[_delegator wash];
}
-(void)wantMoney{
[_delegator makeMoney];
}
-(void)wantToLookAfterKid{
[_delegator kid];
}
-(void)wantToBuyHouse{
[_delegator buyHouse];
}
-(void)wantToBuyCar{
[_delegator buyCar];
}
+(id)girlName:(NSString*)name :(NSInteger)age{
Girl *girl=[[Girl alloc]initWithName:name :age ];
return girl;
}
-(id)initWithName:(NSString*)name :(NSInteger)age{
self=[super init];
if (self) {
_name=name;
_age=age;
}
return self;
}
-(void)setAge:(NSInteger)age{
_age=age;
}
-(id)name{
return _name;
}
-(NSInteger)age{
return _age;
}
-(NSString *)description{
return [NSString stringWithFormat:@"%@,%ld",_name,_age];
}
@end
========================================================
#import <Foundation/Foundation.h>
#import "MarryProtocol.h"
//遵循的协议
@interface Boy : NSObject<MarryProtocol>
{
NSString *_name;
NSInteger _age;
}
+(id)boyName:(NSString*)name :(NSInteger)age;
-(id)initWithName:(NSString*)name :(NSInteger)age;
-(void)setAge:(NSInteger)age;
-(id)name;
-(NSInteger)age;
-(NSString *)description;
@end
=========================================================
#import "Boy.h"
@implementation Boy
//实现协议里规定的条例--@required是必须实现的。
-(void)wash{
NSLog(@"从此我洗衣");
}
-(void)cook{
NSLog(@"我做饭");
}
-(void)makeMoney{
NSLog(@"我挣钱.");
}
-(void)kid{
NSLog(@"我照看孩子");
}
-(void)buyHouse{
NSLog(@"我还买不起房子,但是我会努力的。");
}
//
+(id)boyName:(NSString*)name :(NSInteger)age{
Boy *boy=[[Boy alloc]initWithName:name :age ];
return boy;
}
-(id)initWithName:(NSString*)name :(NSInteger)age{
self=[super init];
if (self) {
_name=name;
_age=age;
}
return self;
}
-(void)setAge:(NSInteger)age{
_age=age;
}
-(id)name{
return _name;
}
-(NSInteger)age{
return _age;
}
-(NSString *)description{
return [NSString stringWithFormat:@"%@,%ld",_name,_age];
}
@end
=========================================================
// MarryProtocol.h 协议内容规定如下 ,只有.h文件
#import <Foundation/Foundation.h>
@protocol MarryProtocol <NSObject>
//必须得======默认
@required
-(void)wash;
-(void)cook;
-(void)makeMoney;
-(void)kid;
//可选择性的
@optional
-(void)buyHouse;
-(void)buyCar;
@end
==========================================================
#import <Foundation/Foundation.h>
@interface person : NSObject
{
NSString *_name;
}
-(id)initWithName:(NSString*)name;
-(void)setName:(NSString*)name;
-(id)name;
@end
===========================================================
#import "person.h"
//延展是对自己写的类的延展,在一个你需要延展的类的.m文件中写延展。
//这一块叫延展。延展部分只有声明。
//延展开始标志
@interface person () //person延展的类名
{
NSInteger _age;
//延展可以增加实例变量,但是只能在类内访问。
}
-(void)introduce:(NSInteger)age;
//延展结束标志
@end
@implementation person
-(void)introduce:(NSInteger)age{
_age=age;
NSLog(@"我是新延展的方法-姓名:%ld,%@",_age,_name);
}
-(id)initWithName:(NSString*)name{
self=[super init];
if (self) {
_name=name;
}
return self;
}
-(void)setName:(NSString*)name{
_name=name;
}
-(id)name{
person *p=[[person alloc]initWithName:@"pp"];
_age=18;
//延展只能在类内访问。--封装的思想。就是不能告诉外人,只能跟内人分享。
[p introduce:_age];
return _name;
}
@end
==================================================================
//
// NSObject+CategoryTrain.h //类目文件格式---类目是扩展封装类(接口)。且在类目中写的方法能被子类继承。不要重写类中原有方法。
#import <Foundation/Foundation.h>
@interface NSObject (CategoryTrain)
//NSObject中有init方法,我在这重写一下,看对之后有什么影响。
//-(id)init;
-(void)sayWhat;
@end
=========================================================
#import "NSObject+CategoryTrain.h"
@implementation NSObject (CategoryTrain)
-(void)sayWhat{
NSLog(@"我是对NSObject类的扩展");
}
//重写init
//-(id)init{
// NSString *_name=@"bella";
// return _name;
//}
@end
============================================================
#import <Foundation/Foundation.h>
@interface NSDate (dateWithString)
+(NSDate *)stringIntoDate:(NSString*)string;
@end
============================================================
#import "NSDate+dateWithString.h"
@implementation NSDate (dateWithString)
+(NSDate *)stringIntoDate:(NSString*)string{
NSDateFormatter *date=[[NSDateFormatter alloc]init];
// [date setDateFormat:@"yyyyMMddhhmmss"];
[date setDateFormat:@"yyyy-MM-dd hh:mm:ss"];
// NSDate *day=[date stringFromDate:string];
NSDate *day=[date dateFromString:string];
return day;
}
@end
=====================================================
相关文章推荐
- Algorithm类介绍(core)
- NYOJ 546 Divideing Jewels ( 背包+二进制优化)
- UVA 11090 Going in Cycle!! SPFA判断负环+二分
- window7安装django
- Go语言相关图书推荐
- [c] sdnuoj1147Pythagoras's Revenge
- Google浏览器清除缓存快捷键
- RAFT algorithm
- poj 2195 Going Home (费用流/KM)
- day7: 类的扩展 NSDate NSDateFormatter Category Extension延展 Protocol协议 delegate代理
- STL Mutating Algorithms小结
- 带logo图片或不带logo图片的二维码生成与解析,亲测成功
- ZOJ 1045 HangOver
- django csrf
- 利用mod_wsgi部署Django应用
- Hexagon处理器的特殊功能
- leetcode: (13) Roman to Integer
- Django
- 关于googleplay 安装-505错误
- 如何通过PS把LOGO的背景色变透明