7、类的扩展

掌握NSDate的使⽤

NSDate是Cocoa中⽤于处理⽇期和时间的基础类,封装了某⼀给定的时刻(含⽇期,时间,时区)。
使⽤+date⽅法获取当前时间例如:

NSDate *nowDate = [NSDate date];
NSLog(@“%@”,nowDate);

注意⽆论你是哪个时区的时间,打印时总是打印对应的0时区时间。

NSTimeinterval

double类型 ⽤以表⽰以秒为单位的时间间隔

//以使⽤-initWithTimeIntervalSinceNow:⽅法传⼊⼀个NSTimeInterval参数,创建⼀个NSDate对象
NSDate * tomorrowDate = [[NSDate alloc] initWithTimeIntervalSinceNow:24*60*60];
NSDate * yesterdayDate = [[NSDate alloc] initWithTimeIntervalSinceNow:-1 * 24*60*60];
//取两个时间对象的间隔
NSTimeinterval = [tomorrowDate timeIntervalSinceDate:yesterdayDate];

掌握NSDateFormatter的使⽤

NSDateFormatter是iOS中的⽇期格式类,功能是实现NSString和NSDate的互转。
常⻅的时间格式化字符串有以下⼀些:
- y(年)
- M(年中的⽉份)
- d(⽉份中的天数)
- H[⼀天中的⼩时数(0-23)]
- h[am/pm 中的⼩时数(1-12)]
- m[⼩时中的分钟数]
- s(分钟中的秒数)

指定⽇期格式

NSDateFormatter * formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];

NSDate转NSString

 NSDateFormatter*formatter = [[NSDateFormatter alloc] init]; 
 [formatter setDateFormat:@"yyyy-MM-dd hh:mm:ss"]; 
 NSString *dateString=[formatter stringFromDate: [NSDate date]];

NSString转NSDate

NSDateFormatter * formatter = [[NSDateFormatter alloc] init]; 
[formatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"]; //注意下面字符串的格式要与此处规定的格式完全对照,否则结果为空
NSString * dateStr = @”2008-08-08 20:08:08”;
NSDate * date = [formatter dateFromString:dateStr];

掌握Category的定义和使⽤

Category也叫分类或类⺫
主要作⽤是为 没有源代码 的类添加⽅法。
通过Category添加的⽅法会成为原类的⼀部分。从⽽达到扩展⼀个类的功能。

定义 Category

  1. 新建⽂件
  2. 选择Objective-C Category模板
  3. 填写类名和分类名
  4. .h⽂件添加⽅法声明
  5. .m添加⽅法实现

声明Category

NSString+SayHi.h⽂件

@interface NSString (SayHi)
    - (void)hi;
@end

实现Category

NSString+SayHi.m⽂件

#import “NSString+SayHi.h”
@implementation NSString(SayHi)
- (void)hi{
    NSLog(@”这是通过category为NSString添加的hi⽅法”);
}
@end

Category与⼦类的区别

比较CategorySubClass
功能只能为类添加方法既能为类添加方法,也能添加变量
特点新添加的方法会成为原始类的一部分,能被子类继承新添加的方法只有子类才有,父类没有
使用使用原始类的实例(如果是-方法)或者原始类(如果是+方法)调用方法子类才能调用。项目即将结束时子类添加了方法,需要对已写代码进行类型替换(将父类替换为子类)

掌握Extension的定义和使⽤

用于管理类的“私有”⽅法
⾯向对象编程也叫⾯向接⼝编程
在设计⼀个类的时候,有些⽅法需要对外公开(我们称为接⼝),有些⽅法仅仅内部使⽤(⽐如:是某个⽅法的⼀个⼩步骤),Extension的功能是帮我们去管理这些内部使⽤的⽅法(“私有”⽅法)

定义Extension

Extension的语法格式和Category很相似
相当于把Category的.h⽂件挪到了原始类的.m⽂件中
Extension针对的是⾃⼰的类,必须有源代码的类

 xxx.m⽂件
@interface xxx (ExtensionName)
//你的⽅法列表
@end
@implementation xxx
//⽅法的实现
@end

Category和Extension的区别

比较CategoryExtension
作用为没有源代码的类添加方法管理类的私有方法
格式定义一对.h和.m把代码写到原始类的.m文件中

掌握Protocol的定义和使⽤

  • 协议是⼀套标准(⼀堆⽅法的声明),只有.h⽂件。就像⼀张任务清单(或便利贴),上⾯写了⼀堆需要处理的事。清单交给谁,谁就要去完成清单上规定的任务
  • 接受协议的对象实现协议中定义的⽅法。即:清单交给谁,谁就要去完成清单上规定的任务。

定义Protocol

@protocol开始,以@end结束
协议中的⽅法默认是必须实现的,即@required。
关键字 @optional 修饰的⽅法是可选的,可实现
也可不实现。

@protocol MarryProtocol <NSObject>
@required//此句可不写,除非遇到@optional,否则文件中所有的方法均为必须实现的
- (void)makeMoney;//必须实现
@optional//可选的,可实现也可不实现
- (void)washcloth;
- (void)cook;
@end

遵守协议

遵守协议分两步

  1. 在类的.h⽂件 ⽗类名后写上<协议名>。
  2. 在.m⽂件中实现协议中的⽅法。

相当于给这个类添加了若干个⽅法。这个类的实例就可以调⽤这些⽅法。

#import “MarryProtocol” 
@interface Boy : NSObject <MarryProtocl> 
… 
@end 
@implementation Boy 
//协议中⽅法的实现
@end

掌握delegate的使用

Protocol的核⼼使⽤场景是实现delegate设计模式。
delegate(代理)。通俗的讲就是代理商,主要的任务是帮你完成⼀些任务
使⽤场景:凡是某些任务⾃⼰不去实现,想让别⼈去实现的时候,就可以指定⼀个代理,让代理帮你去做。你只需要通知代理去做某事。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值