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);