您的位置:首页 > 编程语言 > Go语言

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

=====================================================
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: