学了么久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对象,将日期按照指定的格式转换为日期格式串,

例子:

将日期格式串转换为日期对象@"2008050110231"        NSString *datestr = @"20080501102318";

 

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

        NSDateFormatter *formatter = [[NSDateFormatteralloc] init];

 

第二步:

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

        [formatter setDateStyle:NSDateFormatterFullStyle];

 

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

        [formatter setTimeStyle:NSDateFormatterFullStyle];

 

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

    [formatter setDateFormat:@"yyyyMMddHHmmss"];

 

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

       NSDate *date2 = [formatter dateFromString:datestr];

        NSLog(@"%@",date2);

 

 

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