NSDate的使用

  • NSDate是Cocoa中用于处理日期和时间的基础类,封装类某一给定的时刻,具体的日期,时间和时区

  • 使用+date方法获取当前日期和时间

  • 例如  :NSDate*nowDate = [NSDate date];

  • 注意,,NSLog(@“%@”,nowDate); 无论你是哪个时区的时间,打印时间,打印时总是打印对应的0时区时间

NSTimeinterval


  • 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的使用

1.

  • NSDateFormatteriOS中的日期格式类,主要的功能是实现 代表日期的NSString

  • SDate的互转,提供了系统预置的字符串格式,还允许用户自定义字符串格式。 我们可以设置时区、月的名称、纪元的符号、localcalenderAM/PMweekday的符号

  • 常见的时间格式化字符串有以下一些:年、 年中的月份 、月份中的天数、 

  • 中的小时数(0-23)、 h am/pm 中的小时数(1-12)小时中的分钟数 、分钟中的秒数

  • 指定日期格式: NSDateFormatter * formatter = [[NSDateFormatter alloc] init]; [formatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"]; 

2.

  • NSDateFormatter可以将日期转化为相对应的字符串,同样可以将字串转化为相对应的日期。

  • 日期转化为字符串: NSDateFormatter*formatter =NSDateFormatter alloc] init];

  • [formatter setDateFormat:@"yyyy-MM-dd hh:mm:ss"];

  • NSString *dateString=[formatter stringFromDate: [NSDate date]]; 

3.


  • 时间字符串转化为相对应的日期: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(@这是通过categoryNSString添加的hi方法);

  •  }

  • @end

Category与子类的区别


    

Extension


  • Extension的主要作用是为类添加私有方法。

  •  面向对象编程的另外一个名字叫面向接口编程。

  •  我们在设计一个类的时候,有些方法需要对外公开(我们称为接口),有些方法可能仅仅内部使用(比如:是某个方法的一个小步骤)。

  • Extension的功能是帮我们去管理这些内部使用的方法(私有方 法)。


定义Extension

  • Extension的语法格式和Category很相似 

  • 相当于把Category.h文件挪到了原始类的.m文件中

  •  Extension针对的是的类,必须有源代码的类 

定义Extension

  • xxx.m文件

  • @interface xxx (ExtensionName) 

  • //你的方法列表

  • @end

Extension的实现

  • @implementation xxx

  •  //方法的实现

  • @end 

Category和Extension的区别

    

Protocol

  • Protocol又名协议,是iOS开发中常用的技术。

  • 协议是一套标准(一堆方法的声明),只有.h文件。

  •  接受协议的对象实现协议中定义的方法 

Protocol


  • 协议就像一张任务清单(或便利贴),上面写了一堆需要处理的事。清单交给谁,谁就要去完成清单上规定的任务。

  • 协议定义好之后,需要有类去遵守这个协议,实现协议里面的方法。

  • 遵守协议即在.h文件的父类名后写上<协议名]]>。实现协议里的方法即在.m文件中实现协议中的方法。相当于给这个类添加了若干个

  • 方法。这个类的实例就可以调用这些方法。

定义Protocol


  • @protocol开始,以@end结束,例如:

  • @protocol MarryProtocol <NSObject>

  • - (void)makeMoney;

  • @optional    //可选的协议,

  • - (void)washcloth;

  • - (void)cook;

  • @end

  • 协议中的方法默认是必须实现的,即@required关键字 @optional 修饰的方法是可选的,可实现也可不实现


如何遵守协议


  • #import “MarryProtocol”

  • #这里要引入协议的头文件

  • @interface Boy : NSObject <MarryProtocl>

  • ...


  • @end


  • @implementation Boy


  • //协议中方法的实现


  • @end


delegate设计模式

  • Protocol的核心使用场景是实现delegate设计模式。

  • delegate音译代理。通俗的讲就是代理商,主要的任务是帮你完成一些任务。

  • 比如:保姆就可以认为是delegate,主要的任务是帮你带孩子、做饭、洗衣服等。