学了这么久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