掌握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
- 新建⽂件
- 选择Objective-C Category模板
- 填写类名和分类名
- .h⽂件添加⽅法声明
- .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与⼦类的区别
比较 | Category | SubClass |
---|---|---|
功能 | 只能为类添加方法 | 既能为类添加方法,也能添加变量 |
特点 | 新添加的方法会成为原始类的一部分,能被子类继承 | 新添加的方法只有子类才有,父类没有 |
使用 | 使用原始类的实例(如果是-方法)或者原始类(如果是+方法)调用方法 | 子类才能调用。项目即将结束时子类添加了方法,需要对已写代码进行类型替换(将父类替换为子类) |
掌握Extension的定义和使⽤
用于管理类的“私有”⽅法
⾯向对象编程也叫⾯向接⼝编程
在设计⼀个类的时候,有些⽅法需要对外公开(我们称为接⼝),有些⽅法仅仅内部使⽤(⽐如:是某个⽅法的⼀个⼩步骤),Extension的功能是帮我们去管理这些内部使⽤的⽅法(“私有”⽅法)
定义Extension
Extension的语法格式和Category很相似
相当于把Category的.h⽂件挪到了原始类的.m⽂件中
Extension针对的是⾃⼰的类,必须有源代码的类
xxx.m⽂件
@interface xxx (ExtensionName)
//你的⽅法列表
@end
@implementation xxx
//⽅法的实现
@end
Category和Extension的区别
比较 | Category | Extension |
---|---|---|
作用 | 为没有源代码的类添加方法 | 管理类的私有方法 |
格式 | 定义一对.h和.m | 把代码写到原始类的.m文件中 |
掌握Protocol的定义和使⽤
- 协议是⼀套标准(⼀堆⽅法的声明),只有.h⽂件。就像⼀张任务清单(或便利贴),上⾯写了⼀堆需要处理的事。清单交给谁,谁就要去完成清单上规定的任务
- 接受协议的对象实现协议中定义的⽅法。即:清单交给谁,谁就要去完成清单上规定的任务。
定义Protocol
@protocol开始,以@end结束
协议中的⽅法默认是必须实现的,即@required。
关键字 @optional 修饰的⽅法是可选的,可实现
也可不实现。
@protocol MarryProtocol <NSObject>
@required//此句可不写,除非遇到@optional,否则文件中所有的方法均为必须实现的
- (void)makeMoney;//必须实现
@optional//可选的,可实现也可不实现
- (void)washcloth;
- (void)cook;
@end
遵守协议
遵守协议分两步
- 在类的.h⽂件 ⽗类名后写上<协议名>。
- 在.m⽂件中实现协议中的⽅法。
相当于给这个类添加了若干个⽅法。这个类的实例就可以调⽤这些⽅法。
#import “MarryProtocol”
@interface Boy : NSObject <MarryProtocl>
…
@end
@implementation Boy
//协议中⽅法的实现
@end
掌握delegate的使用
Protocol的核⼼使⽤场景是实现delegate设计模式。
delegate(代理)。通俗的讲就是代理商,主要的任务是帮你完成⼀些任务
使⽤场景:凡是某些任务⾃⼰不去实现,想让别⼈去实现的时候,就可以指定⼀个代理,让代理帮你去做。你只需要通知代理去做某事。