- NSDateFormatter是iOS中的日期格式类,主要的功能是实现代表日期的字符串和NSDate进行互转,提供了系统预置的字符串格式,还允许用户自定义字符串格式。我们可以设置时区,月的名称、纪元的符号、local、calender、AM/PM、weekday的符号等
- 常见得时间格式化字符串: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"]; - NSDateFormatter可以将日期转化为相对应的字符串,同意可以将字符串转化为响应的日期
- 日期转化为字符串:
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
NSString *locationString = [format stringFromDate:[NSDate date]]; - 时间字符串转化为想对应的日期:
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];
// 注意:不能为任意日期格式的字符串创建NSDateFormatter对象
- Category也叫分类或类目
- 主要作用是为:没有源代码的类添加方法
- 通过Category添加的方法会成为原类的一部分。从而达到扩展一个类的功能
- 如何定义Category:
a. 新建文件
b. 选择Objective-C Category模板
c. 填写类名和分类名
d. (.h)文件添加方法声明
e. (.m)文件添加方法实现
f. 需要使用的地方进行调用 - Category的实现:
/// NSString+SayHi.h 文件
#import
@interface NSString (SayHi)
- (void)hi;
@end
/// NSString+SayHi.m 文件
#import "NSString+SayHi.h"
@implementation NSString (SayHi)
#pragma mark 实现hi方法
- (void)hi
{
NSLog(@"这是通过category为NSString创建的hi方法"); }
@end
- Category与子类的区别:
- Extension的主要作用是为类添加‘私有’方法。
- 面向对象编程另外一个名字叫面向接口编程。
- 我们在设计一个类的时候,有些方法需要对外公开(我们称为接口),有些方法可能仅仅内部使用(比如,是某个方法的一个小步骤)
- Extension的功能是帮我们去管理这些内部使用的方法(“私有”方法)
- Extension特点:
a. Extension的语法格式和Category很相似
b. 相当于把Category的.h文件挪到了原始类的.m文件中
c. Extension针对的是自己的类,必须有源代码的类
- 定义Extension:在Person.m文件中添加Extension:
#import "Person.h"
// Extension
@interface Person (SayHi)
// 此处写方法列表
- (void)sayHi;
- (void)sayHaHa;
- (void)sayGoodBye;
@end
@implementation Person
// 实现Extension中的方法
- (void)sayHi
{
NSLog(@"hi"); }
- (void)sayHaHa
{
NSLog(@"haha"); }
- (void)sayGoodBye
{
NSLog(@"goodbye"); }
@end
- Category和Extension的区别:
- Protocol又名协议,是iOS开发中常用技术
- 协议是一套标准(一堆方法的声明),只有(.h)文件
- 接受协议的对象实现协议中定义的方法
- 如何定义Protocol:
/// 定义协议
// @protocol开始 @end结束
@protocol MarryProtocol <<span style="color: #6122ae">NSObject>
// @required修饰的方法是必须实现,默认是@required
@required
- (void)makeMoney;
// @optional修饰的方法是可选实现
@optional
- (void)washCloth;
- (void)cook;
@end
- Protocol特点:
a. 协议就像一张任务清单(或便利贴),上面写了一堆需要处理的事。清单交给谁,谁就要去完成清单上规定的任务。
b. 协议定义好之后,需要有类去遵守这个协议,实现协议里面的方法
c. 遵守协议即在(.h)文件的父类名后写上<协议名>。实现协议里的方法即在(.m)文件中实现协议中的方法。相当于给这个类添加了脱岗额方法。这个类的实例就可以调用这些方法。
- Protocol的核心使用场景是实现delegate设计模式
- delegate音译代理。通俗的讲就是代理商,主要的任务是帮你完成了一些任务
- 比如:保姆就可以认为是delegate,主要的任务是帮你带孩子、做饭、洗衣服等
- 使用场景:
凡是某些任务自己不去实现,想让别人去实现的时候,就可以指定一个代理,让代理帮你去做。你只需要通知代理去做某些事。