学了这么久OC我们都知道OC中的类分为系统类和自定义的类,当我们在使用系统为我们提供的类时有时往往不能满足我们的需要,例如,字符串NSString类提供了比较字符串的方法compare,为数组排序时系统默认的是升序,当需要为数组按降序排序时,一种途径是需要新建一个类写一个降序的方法,而另一个途径就是系统提供的category(分类,类目),分类(类目,category)的目的为了给没有源代码的类添加方法(只能添加方法,不能添加实例变量),是扩充一个类功能的方式之一,为原有类扩充的方法会成为原类的一部分,直接用系统类对象或者系统类调用该方法, 使用即可.

分类也分为,h(接口部分)和.m(实现部分),.h文件中写方法的声明,.m文件中写方法的实现,

(1),新建一个类,在新建类时选择Objective-C category,

建立之后,在.h文件里@interface + 要扩展的类的类名 +(分类名)@end结束,

先声明分类方法

/两个字符串比较对象;

-(NSComparisonResult)sortDescending:(NSString *)descending;

在.m文件里实现

//两个字符串比较对象;

- (NSComparisonResult)sortDescending:(NSString *)descending

{

return -[selfcompare:descending];

}

在main函数里可以直接使用,如:

对数组array按照降序排序

NSArray *array = @[@"dd",@"bb",@"aa",@"ee",@"mm"];

NSArray *arrDescending = [array sortedArrayUsingSelector:@selector(sortDescending:)];

NSLog(@"%@",arrDescending);

输出结果为

(

mm,

ee,

dd,

bb,

aa

)

二, 日期类常用方法用法NSDate

1,基本用法:

1),创建一个对象,赋值为当前日期date 创建的NSDate对象,获得的永远是0时区的时间,我们是东八区,需要加上8个小时

NSDate *date = [NSDatedate];

2),创建一个明天此时的日期(时间间隔是以秒为单位的)dateWithTimeIntervalSinceNow:

NSDate *tomorrow = [NSDatedateWithTimeIntervalSinceNow:24 * 60 * 60];

NSLog(@"%@",tomorrow);

创建一个昨天此时的日期

NSDate *yesterday = [NSDatedateWithTimeIntervalSinceNow:-24 * 60 * 60];

NSLog(@"%@",yesterday);

3).获取两个日期的时间间隔timeIntervalSinceDate: 实现过程是前者减去后者

NSTimeInterval intervil = [tomorrow timeIntervalSinceDate:yesterday];

NSLog(@"%.1f",intervil/60/60/24);

4),比较日期的早晚

(1),获得两个日期中较早的日期earlierDate:

NSDate *earlier = [tomorrow earlierDate:yesterday ];

NSLog(@"%@",earlier);

(2),获得两个日期中较晚的日期laterDate:

NSDate *later = [tomorrow laterDate:yesterday ];

NSLog(@"%@",later);

(3),两个日期比较 compare:

NSComparisonResult类型是基本数据类型duoble的重定义

NSComparisonResultcomparDate = [tomorrow compare:yesterday ];

NSLog(@"%ld",comparDate);

2,日期类与字符串的相互转换

(1), NSDateFormatter是一个日期格式类,将日期以一定的格式进行转换,(原理,转换成字符串),分为三步

NSDate *dateNow = [NSDatedate];

第一步: 创建日期格式类对象

NSDateFormatter *formatter = [[NSDateFormatteralloc] init];

第二步: 指定日期格式 formatter

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

HH表示24小时制,hh表示12小时制,MM表示月份,mm表示分钟,DD表示当前是该年的第几天,dd表示当月天数,ss表示秒数,如果年份为yy,则输出时只显示年份的后两位,如果为其他的则显示完整年份

第三步: 转换 stringFromDate:

NSString *dateStr = [[NSStringalloc] init];

dateStr = [formatter stringFromDate:dateNow];

(2),将日期格式转换为NSDate对象,即将日期按照指定的格式转换为日期格式串,

例子:

将日期格式串转换为日期对象@"2008年05月01日10时23分1秒" NSString *datestr = @"2008年05月01日10时23分18秒";

第一步: 创建日期格式类对象

NSDateFormatter *formatter = [[NSDateFormatteralloc] init];

第二步:

(1),设置日期的格式 (有四种)

[formatter setDateStyle:NSDateFormatterFullStyle];

(2),设置时间的格式 (有四种)

[formatter setTimeStyle:NSDateFormatterFullStyle];

(3)设置日期格式(一定要和日期格式串中的日期格式保持一致)

[formatter setDateFormat:@"yyyy年MM月dd日HH时mm分ss秒"];

第三步: 转换 dateFromString: 将格式串转换为日期对象

NSDate *date2 = [formatter dateFromString:datestr];

NSLog(@"%@",date2);

要注意的是:日期类对象输出默认的是0时区的时间,如: 2014-08-12 02:38:30 +0000,其实是中国标准时间上午2014-08-12 10:38:30