NSDate的使用

NSDate是Cocoa中用于处理日期和时间的基础类,封装类某一给定的时刻,具体的日期,时间和时区

使用+date方法获取当前日期和时间

例如 :NSDate*nowDate = [NSDate date];

注意,,NSLog(@“%@”,nowDate); 无论你是哪个时区的时间,打印时间,打印时总是打印对应的0时区时间

NSTimeinterval


NSTimeInterval(即double类型) 用以表示以秒为单位的时间间隔

可以使用-initWithTimeIntervalSinceNow:方法传入一个NSTimeInterval参数,创建一个NSDate对象

例如:NSDate * tomorrowDate = [[NSDate alloc] initWithTimeIntervalSinceNow:24*60 * 60];

NSDate * yesterdayDate = [[NSDate alloc] initWithTimeIntervalSinceNow:-1 * 24*60 *60];


取两个时间对象的间隔:NSTimeinterval = [tomorrowDate timeIntervalSinceDate:yesterdayDate];


NSDateFormatter的使用

1.

NSDateFormatter是iOS中的日期格式类,主要的功能是实现 代表日期的NSString和

SDate的互转,提供了系统预置的字符串格式,还允许用户自定义字符串格式。 我们可以设置时区、月的名称、纪元的符号、local、calender、AM/PM、weekday的符号

常见的时间格式化字符串有以下一些:y年、M年中的月份 、d月份中的天数、H一

中的小时数(0-23)、h am/pm中的小时数(1-12)、m小时中的分钟数 、s分钟中的秒数

指定日期格式:NSDateFormatter * formatter = [[NSDateFormatter alloc] init]; [formatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];

2.

NSDateFormatter可以将日期转化为相对应的字符串,同样可以将字串转化为相对应的日期。

日期转化为字符串:NSDateFormatter*formatter =NSDateFormatter alloc] init];

[formatter setDateFormat:@"yyyy-MM-dd hh:mm:ss"];

NSString *dateString=[formatter stringFromDate: [NSDate date]];

3.


时间字符串转化为相对应的日期:NSDateFormatter * formatter =[[NSDateFormatter alloc] init];

[formatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];

NSString * dateStr = @”2008-08-08 20:08:08”; NSDate * date = [formatter dateFromString:dateStr];


类目Category

Category也叫分类或类目

主要作用是为没有源代码的类添加方法。

通过Category添加的方法会成为原类的一部分。从而达到扩展一 类的功能。

Category的定义

新建文件

选择Objective-C Category模板

填写类名和分类名

.h文件添加方法声明

.m添加方法实现

需要使用的地方进行调用。

Category的声明

NSString+SayHi.h文件

@interface NSString (SayHi)

- (void)hi;

@end

Category的实现

NSString+SayHi.m文件

#import“NSString+SayHi.h”

@implementation NSString(SayHi)

- (void)hi{

NSLog(@”这是通过category为NSString添加的hi方法”);

}

@end

Category与子类的区别


Extension


Extension的主要作用是为类添加“私有”方法。

面向对象编程的另外一个名字叫面向接口编程。

我们在设计一个类的时候,有些方法需要对外公开(我们称为接口),有些方法可能仅仅内部使用(比如:是某个方法的一个小步骤)。

Extension的功能是帮我们去管理这些内部使用的方法(“私有”方 法)。


定义Extension

Extension的语法格式和Category很相似

相当于把Category的.h文件挪到了原始类的.m文件中

Extension针对的是的类,必须有源代码的类

定义Extension

xxx.m文件

@interface xxx (ExtensionName)

//你的方法列表

@end

Extension的实现

@implementation xxx

//方法的实现

@end

Category和Extension的区别

Protocol

Protocol又名协议,是iOS开发中常用的技术。

协议是一套标准(一堆方法的声明),只有.h文件。

接受协议的对象实现协议中定义的方法

Protocol


协议就像一张任务清单(或便利贴),上面写了一堆需要处理的事。清单交给谁,谁就要去完成清单上规定的任务。

协议定义好之后,需要有类去遵守这个协议,实现协议里面的方法。

遵守协议即在.h文件的父类名后写上<协议名]]>。实现协议里的方法即在.m文件中实现协议中的方法。相当于给这个类添加了若干个

方法。这个类的实例就可以调用这些方法。

定义Protocol


@protocol开始,以@end结束,例如:

@protocol MarryProtocol <NSObject>

- (void)makeMoney;

@optional //可选的协议,

- (void)washcloth;

- (void)cook;

@end

协议中的方法默认是必须实现的,即@required关键字 @optional 修饰的方法是可选的,可实现也可不实现。


如何遵守协议


#import “MarryProtocol”

#这里要引入协议的头文件

@interface Boy : NSObject <MarryProtocl>

...


@end


@implementation Boy


//协议中方法的实现


@end


delegate设计模式

Protocol的核心使用场景是实现delegate设计模式。

delegate音译代理。通俗的讲就是代理商,主要的任务是帮你完成一些任务。

比如:保姆就可以认为是delegate,主要的任务是帮你带孩子、做饭、洗衣服等。