07 类的扩展
来源:互联网 发布:海康半球网络摄像机 编辑:程序博客网 时间:2024/05/16 14:06
1.NSDate的使用
NSDate是Cocoa中⽤于处理⽇期和时间的基础类,封装了某⼀给定的时刻(含日期,时间,时区)
注意NSLog(@“%@”,nowDate);⽆论你是哪个时区的时间,打印时总是打印对应的0时区时间。
2.NSTimelnterval
NSTimelnterval(即double类型)
常用方法:
可以使用-initWithTimeIntervalSinceNow:方法传⼊一个NSTimeInterval参数,创建
一个 NSDate对象
1 // NSDate: 处理时间的类 2 //1.创建NSDate对象 3 // + (instancetype)date; 4 NSDate *nowDate =[NSDate date]; 5 NSLog(@"%@",nowDate); 6 7 //NSTimeInterval 间隔时间秒数 double类型 8 //创建明天现在的时间 9 // - (instancetype)initWithTimeIntervalSinceNow:(NSTimeInterval)secs;10 NSDate *tomorrowDate = [[ NSDate alloc]initWithTimeIntervalSinceNow:24*3600];11 NSLog(@"%@",tomorrowDate);12 //创建昨天现在的时间13 NSDate *yesterdayDate = [[ NSDate alloc]initWithTimeIntervalSinceNow:-24*3600];14 NSLog(@"%@",yesterdayDate);15 //取两个时间对象的间隔16 // - (NSTimeInterval)timeIntervalSinceDate:(NSDate *)anotherDate;17 NSTimeInterval time1 = [ tomorrowDate timeIntervalSinceDate:yesterdayDate]/3600;18 NSLog(@"%.0f",time1);19 //练习20 // + (instancetype)dateWithTimeIntervalSinceNow:(NSTimeInterval)secs;21 NSDate *datetime2 = [ NSDate dateWithTimeIntervalSinceNow:23 * 2342 ];22 // - (NSTimeInterval)timeIntervalSinceNow;23 NSTimeInterval time2 = [ datetime2 timeIntervalSinceNow];24 if (time2 < 60) {25 NSLog(@"刚刚");26 }else if (time2 > 60 && time2 < 3600){27 NSLog(@"%.f前",time2/60);28 }else if (time2 > 3600){29 NSLog(@"%.0f小时前",time2/3600);30 }
3.NSDateFormatter
NSDateFormatter是iOS中的⽇日期格式类,功能是实现NSString和NSDate的互
转。
常见的时间格式化字符串有以下⼀一些:y 年、 M 年中的月份 、d ⽉月份中的天数、
H一天中的小时数(0-23), am/pm 中的小时数(1-12)、m小时中的分钟数、s分钟中的秒数等
指定日期格式: NSDateFormatter * formatter = [[NSDateFormatter alloc]init];
[formatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
//创建日期时间格式化类NSDateFormatter //设置时间格式化样式 NSDateFormatter *dateFormatter = [[NSDateFormatter alloc]init];// - (void)setDateFormat:(NSString *)string; [dateFormatter setDateFormat:@"yyyy年MM月dd日 HH时mm分ss秒"]; // - (NSString *)stringFromDate:(NSDate *)date; NSString *timestr =[ dateFormatter stringFromDate:[NSDate date]]; NSLog(@"%@",timestr);// 将字符串@“2014年05⽉01⽇ 10点23分18秒”转换为NSDate对象。// @"2014年11月21日 11时42分49秒" 格式必须相同 NSString *timestring = @"2014年11月21日 11时42分49秒";// - (NSDate *)dateFromString:(NSString *)string; NSDate *datetimer = [ dateFormatter dateFromString:timestring]; NSLog(@"datefromString:%@",datetimer);
4.Category
Category也叫分类或类⽬
主要作⽤是为没有源代码的类添加方法。
通过Category添加的⽅法会成为原类的⼀部分。从⽽达到扩展⼀个类的功能。
如何定义Category
.h里添加方法声明
#import <Foundation/Foundation.h>// @inteface 后面紧跟的类名表示的是你要给哪个类扩充方法// (Hi) : 它中hi表示的时当前类目的名字@interface NSString (Hi)+ (void)sayHi;@end
.m添加方法实现
@implementation NSString (Hi)+ (void)sayHi{ NSLog(@"hai");}
@end
5.Extension
Extension的主要作用是管理类的“私有”方法。面向对象编程也叫⾯面向接⼝编程。
在设计⼀个类的时候,有些方法需要对外公开(我们称为接口), 有些方法仅内部使用(⽐如:是某个方法的一个小步骤)。
Extension的功能是帮我们去管理这些内部使用的方法(“私有”方法)。
Extension的语法格式和Category很相似 相当于把Category的.h⽂文件挪到了原始类
的.m⽂件中 Extension针对的是自⼰己的类,必须有源代码的类
如何定义Extension?
xxx.m文件 (一个文件中)
@interface xxx (ExtensionName) //你的方法列表
@end
@implementation xxx //方法的实现
@end
#import "Person.h"//延展 Extension@interface Person ()- (void)introduceSelf;@end@implementation Person
- (void)introduceSelf{ NSLog(@"hello");}@end
Category与Extension的区别
6.Protocol(协议),是iOS开发中常⽤用的技术。
协议是一套标准(一堆⽅法的声明),只有.h文件。就像一张任务清单(或便利贴),上面写了一堆需要处理的事。清单交给谁,谁就要去完成清单上规定的任务。
接受协议的对象实现协议中定义的⽅法。即:清单交给谁,谁就要去完成清单上规定的任务。
@protocol开始,以@end结束,例如:
@protocol MarryProtocol <NSObject>
- (void)makeMoney;
@optional
- (void)washcloth;
- (void)cook;
@end
协议中的⽅法默认是必须实现的,即@required。 关键字 @optional 修饰的方法是可
选的,可实现也可不实现。
遵守协议分两步
1、在类的.h文件 父类名后写上<协议名>。
2、在.m文件中实现协议中的方法。相当于给这个类添加了若干个方法。这个类的实例
就可以调用这些方法.
如何遵守协议?
#import “MarryProtocol”
@interface Boy : NSObject <MarryProtocl> ...
@end
@implementation Boy
//协议中⽅法的实现
@end
delegate
Protocol的核⼼使用场景是实现delegate设计模式。
delegate(代理)。通俗的讲就是代理商,主要的任务是帮你完成一些任务。
比如:保姆就可以认为是delegate,主要的任务是帮你带孩子、 做饭、洗衣服等。
使⽤场景:凡是某些任务⾃⼰不去实现,想让别人去实现的时候, 就可以指定⼀个代理,让
代理帮你去做。你只需要通知代理去做某事。
1.NSDate的使用
NSDate是Cocoa中⽤于处理⽇期和时间的基础类,封装了某⼀给定的时刻(含日期,时间,时区)
注意NSLog(@“%@”,nowDate);⽆论你是哪个时区的时间,打印时总是打印对应的0时区时间。
2.NSTimelnterval
NSTimelnterval(即double类型)
常用方法:
可以使用-initWithTimeIntervalSinceNow:方法传⼊一个NSTimeInterval参数,创建
一个 NSDate对象
1 // NSDate: 处理时间的类 2 //1.创建NSDate对象 3 // + (instancetype)date; 4 NSDate *nowDate =[NSDate date]; 5 NSLog(@"%@",nowDate); 6 7 //NSTimeInterval 间隔时间秒数 double类型 8 //创建明天现在的时间 9 // - (instancetype)initWithTimeIntervalSinceNow:(NSTimeInterval)secs;10 NSDate *tomorrowDate = [[ NSDate alloc]initWithTimeIntervalSinceNow:24*3600];11 NSLog(@"%@",tomorrowDate);12 //创建昨天现在的时间13 NSDate *yesterdayDate = [[ NSDate alloc]initWithTimeIntervalSinceNow:-24*3600];14 NSLog(@"%@",yesterdayDate);15 //取两个时间对象的间隔16 // - (NSTimeInterval)timeIntervalSinceDate:(NSDate *)anotherDate;17 NSTimeInterval time1 = [ tomorrowDate timeIntervalSinceDate:yesterdayDate]/3600;18 NSLog(@"%.0f",time1);19 //练习20 // + (instancetype)dateWithTimeIntervalSinceNow:(NSTimeInterval)secs;21 NSDate *datetime2 = [ NSDate dateWithTimeIntervalSinceNow:23 * 2342 ];22 // - (NSTimeInterval)timeIntervalSinceNow;23 NSTimeInterval time2 = [ datetime2 timeIntervalSinceNow];24 if (time2 < 60) {25 NSLog(@"刚刚");26 }else if (time2 > 60 && time2 < 3600){27 NSLog(@"%.f前",time2/60);28 }else if (time2 > 3600){29 NSLog(@"%.0f小时前",time2/3600);30 }
3.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"];
//创建日期时间格式化类NSDateFormatter //设置时间格式化样式 NSDateFormatter *dateFormatter = [[ NSDateFormatter alloc]init];// - (void)setDateFormat:(NSString *)string; [dateFormatter setDateFormat:@"yyyy年MM月dd日 HH时mm分ss秒"]; // - (NSString *)stringFromDate:(NSDate *)date; NSString *timestr =[ dateFormatter stringFromDate:[NSDate date]]; NSLog(@"%@",timestr);// 将字符串@“2014年05⽉01⽇ 10点23分18秒”转换为NSDate对象。// @"2014年11月21日 11时42分49秒" 格式必须相同 NSString *timestring = @"2014年11月21日 11时42分49秒";// - (NSDate *)dateFromString:(NSString *)string; NSDate *datetimer = [ dateFormatter dateFromString:timestring]; NSLog(@"datefromString:%@",datetimer);
4.Category
Category也叫分类或类⽬
主要作⽤是为没有源代码的类添加方法。
通过Category添加的⽅法会成为原类的⼀部分。从⽽达到扩展⼀个类的功能。
如何定义Category
.h里添加方法声明
#import <Foundation/Foundation.h>// @inteface 后面紧跟的类名表示的是你要给哪个类扩充方法// (Hi) : 它中hi表示的时当前类目的名字@interface NSString (Hi)+ (void)sayHi;@end
.m添加方法实现
@implementation NSString (Hi)+ (void)sayHi{ NSLog(@"hai");}
@end
5.Extension
Extension的主要作用是管理类的“私有”方法。面向对象编程也叫⾯面向接⼝编程。
在设计⼀个类的时候,有些方法需要对外公开(我们称为接口), 有些方法仅内部使用(⽐如:是某个方法的一个小步骤)。
Extension的功能是帮我们去管理这些内部使用的方法(“私有”方法)。
Extension的语法格式和Category很相似 相当于把Category的.h⽂文件挪到了原始类的.m⽂件中 Extension针对的是自⼰己的类,必须有源代码的类
如何定义Extension?
xxx.m⽂文件
@interface xxx (ExtensionName) //你的方法列表
@end
@implementation xxx //方法的实现
@end
#import "Person.h"//延展 Extension@interface Person ()- (void)introduceSelf;@end@implementation Person- (void)introduceSelf{ NSLog(@"hello");}@end
Category与Extension的区别
6.Protocol(协议),是iOS开发中常⽤用的技术。
协议是一套标准(一堆⽅法的声明),只有.h文件。就像一张任务清单(或便利贴),上面写了一堆需要处理的事。清单交给谁,谁就要去完成清单上规定的任务。
接受协议的对象实现协议中定义的⽅法。即:清单交给谁,谁就要去完成清单上规定的任务。
@protocol开始,以@end结束,例如:
@protocol MarryProtocol <NSObject>
- (void)makeMoney;
@optional
- (void)washcloth;
- (void)cook;
@end
协议中的⽅法默认是必须实现的,即@required。 关键字 @optional 修饰的方法是可选的,可实现也可不实现。
遵守协议分两步
1、在类的.h文件 父类名后写上<协议名>。
2、在.m文件中实现协议中的方法。相当于给这个类添加了若干个方法。这个类的实例就可以调用这些方法.
如何遵守协议?
#import “MarryProtocol”
@interface Boy : NSObject <MarryProtocl> ...
@end
@implementation Boy
//协议中⽅法的实现
@end
delegate
Protocol的核⼼使用场景是实现delegate设计模式。
delegate(代理)。通俗的讲就是代理商,主要的任务是帮你完成一些任务。
比如:保姆就可以认为是delegate,主要的任务是帮你带孩子、 做饭、洗衣服等。
使⽤场景:凡是某些任务⾃⼰不去实现,想让别人去实现的时候, 就可以指定⼀个代理,让代理帮你去做。你只需要通知代理去做某事。
- 07 类的扩展
- UIView的类扩展,扩展CGRect
- 2013-07-17 类的扩展
- 07 函数的扩展
- Math类的扩展
- CxSkinButton类的扩展
- 类的扩展
- 类的扩展
- OC 类的扩展
- OC----类的扩展
- 类的扩展
- UIColor类的扩展
- UI类的扩展
- 类的扩展
- 类的扩展
- C#类的扩展
- 类的扩展
- 类的扩展
- Android开发错误——Could not find class
- 大头锻炼日记2 -- 无指针和结构体的vbscript中实现单向链表
- Java中的Map List Set等集合类
- javascript操作table的动态添加行和删除行
- Android网络编程(一)
- 07 类的扩展
- gcc编译错误XX/bin/ld:cannot find -lxxx
- 大头锻炼日记3 -- vbscript静态链表实现法
- PHP源码来操作memcached服务
- c++中指针与const
- 6410中断编程
- HDU 1976 Software Version【简单的转化题】
- 卷积的意义
- HDU2066一个人的旅行(最短路)