Category类别、继承

Category类别、继承

一、概念

1.category 类别

向某一个类中添加一些方法,不能添加属性

在哪里使用这个类别,就在哪里导入这个头文件

一个地方声明,多个地方实现

         

需要向某一个类里面添加一些方法

1.这个类是自己创建的,可以直接在源文件里面添加

2.这个类是系统提供的,如NSString,就必须使用Category

 

二、举例

1.Person.h

#import <Foundation/Foundation.h>

@interface Person : NSObject

@property (nonatomic, strong) NSString *name;
@property (nonatomic, assign) int age;

- (void)eat;
- (void)work;
@end

2.Person.m

#import "Person.h"

@implementation Person

-(void)eat{
    NSLog(@"eat");
}

-(void)work{
    NSLog(@"work");
}
@end

3.InHome类继承于Person,是一个类别

 

#import "Person.h"

//方法的前向声明
@interface Person (InHome)

- (int)yearsOld;
@end

注意类别里面的方法可以先不实现

4.假如ClassA要使用该类别的方法:

ClassA.m

#import "ClassA.h"
#import "Person.h"
#import "Person+InHome.h"

@implementation ClassA

-(void)test{
    Person *p = [Person new];
    [p yearsOld];
}

@end

//在这种情况下,需要实现InHome方法
@implementation Person (InHome)

- (int)yearsOld{
    return 20;
}
@end

 

三、实例:获取当前时间

1.添加方法:如果类别里添加的方法和原有类冲突,类别里面的方法优先级最大,会覆盖原有的方法

DateString.h

#import <Foundation/Foundation.h>

@interface NSString (DateString)

//从日期中按照一定的格式,提取字符串
+ (NSString *)timeString;

//将一个字符串转化为NSDate
- (NSDate *)dateString;

@end

2.时间日期格式:

yy:年的后面2位数字

 yyyy:显示完整的年

 月的显示:

 M:显示成1~12,1位数或2位数

 MM:显示成01~12,不足2位数会补0

 MMM:英文月份的缩写,例如:Jan

 MMMM:英文月份完整显示,例如:January

 

 日的显示:

 d:显示成1~31,1位数或2位数

 dd:显示成01~31,不足2位数会补0

 星期的显示:

 EEE:星期的英文缩写,如Sun

 EEEE:星期的英文完整显示,如,Sunday

 

 上/下午的显示:

 aa:显示AM或PM

 

 小時的显示:

 H:显示成0~23,1位数或2位数(24小时制)

 HH:显示成00~23,不足2位数会补0(24小时制)

 K:显示成0~12,1位数或2位数(12小時制)

 KK:显示成0~12,不足2位数会补0(12小时制)

 

 分的显示:

 m:显示0~59,1位数或2位数

 mm:显示00~59,不足2位数会补0

 

 秒的显示:

 s:显示0~59,1位数或2位数

 ss:显示00~59,不足2位数会补0

 S: 毫秒的显示

 

 时区的显示:

 z / zz /zzz :PDT

 zzzz:Pacific Daylight Time

 Z / ZZ / ZZZ :-0800

 ZZZZ:GMT -08:00

 v:PT

 vvvv:Pacific Time

 

 DateString.m

#import "NSString+DateString.h"

@implementation NSString (DateString)

+(NSString *)timeString{
    //用于管理按照什么格式提取字符串
    NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
    formatter.dateFormat = @"yyyy-MM-d EEE aa HH:mm:ss";
    
    //获取当前这个时间
    NSDate *d = [NSDate date];
    NSString *time = [formatter stringFromDate:d];
    return time;
}

//将日期转化为NSDate
- (NSDate *)dateString{
    NSDateFormatter *formatter = [NSDateFormatter new];
    formatter.dateFormat = @"yyyy-MM-d EEE aa HH:mm:ss";
    NSDate *d = [formatter dateFromString:self];
    return d;
}
@end

main.m

//获取当前日期
        NSString *time = [NSString timeString];
        NSLog(@"%@", time);
        
        //将日期转换为NSDate
        NSString *dString = @"2018-08-1 Wed AM 09:34:14";
        NSDate *d = [dString dateString];
        NSLog(@"%@", d);

 

posted @ 2018-08-01 20:06 健泽 阅读( ...) 评论( ...) 编辑 收藏
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值