OC 07 类的扩展
1.NSDate的使用
NSDate是Cocoa中⽤于处理⽇期和时间的基础类,封装了某⼀给定的时刻(含日期,时间,时区)
注意NSLog(@“%@”,nowDate);⽆论你是哪个时区的时间,打印时总是打印对应的0时区时间。
2.NSTimelnterval
NSTimelnterval(即double类型)
常用方法:
可以使用-initWithTimeIntervalSinceNow:方法传⼊一个NSTimeInterval参数,创建一个 NSDate对象
// NSDate: 处理时间的类
//1.创建NSDate对象
// + (instancetype)date;
NSDate *nowDate =[NSDate date];
NSLog(@"%@",nowDate); //NSTimeInterval 间隔时间秒数 double类型
//创建明天现在的时间
// - (instancetype)initWithTimeIntervalSinceNow:(NSTimeInterval)secs;
NSDate *tomorrowDate = [[ NSDate alloc]initWithTimeIntervalSinceNow:*];
NSLog(@"%@",tomorrowDate);
//创建昨天现在的时间
NSDate *yesterdayDate = [[ NSDate alloc]initWithTimeIntervalSinceNow:-*];
NSLog(@"%@",yesterdayDate);
//取两个时间对象的间隔
// - (NSTimeInterval)timeIntervalSinceDate:(NSDate *)anotherDate;
NSTimeInterval time1 = [ tomorrowDate timeIntervalSinceDate:yesterdayDate]/;
NSLog(@"%.0f",time1);
//练习
// + (instancetype)dateWithTimeIntervalSinceNow:(NSTimeInterval)secs;
NSDate *datetime2 = [ NSDate dateWithTimeIntervalSinceNow: * ];
// - (NSTimeInterval)timeIntervalSinceNow;
NSTimeInterval time2 = [ datetime2 timeIntervalSinceNow];
if (time2 < ) {
NSLog(@"刚刚");
}else if (time2 > && time2 < ){
NSLog(@"%.f前",time2/);
}else if (time2 > ){
NSLog(@"%.0f小时前",time2/);
}
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,主要的任务是帮你带孩子、 做饭、洗衣服等。
使⽤场景:凡是某些任务⾃⼰不去实现,想让别人去实现的时候, 就可以指定⼀个代理,让代理帮你去做。你只需要通知代理去做某事。
OC 07 类的扩展的更多相关文章
- OC基础:类的扩展.协议 分类: ios学习 OC 2015-06-22 19:22 34人阅读 评论(0) 收藏
//再设计一个类的时候,有些方法需要对外公开(接口),有些仅供内部使用. 类的扩展:为类添加新的特征(属性)或者方法 对已知类: 1.直接添加 2.继承(在其子类中添加实例变量和方法) 3.使用ext ...
- OC: 类的扩展、类的延展、协议、 NSDate
NSDateFormatter 指定⽇日期格式: NSDateFormatter * formatter = [[NSDateFormatter alloc] init]; [formatter ...
- OC分类(类目/类别) 和 类扩展 - 全解析
OC分类(类目/类别) 和 类扩展 - 全解析 具体见: oschina -> MyDemo -> 011.FoundationLog-OC分类剖析 http://blog.csdn. ...
- OC中类别、扩展、协议与委托
一.类别(category) 类别(category)——通过使用类别,我们可以动态地为现有的类添加新方法,而且可以将类定义模块化地分不到多个相关文件中.通常只在类别中定义方法.(类别,接口部分的定义 ...
- Java虚拟机JVM学习07 类的卸载机制
Java虚拟机JVM学习07 类的卸载机制 类的生命周期 当Sample类被加载.连接和初始化后,它的生命周期就开始了. 当代表Sample类的Class对象不再被引用,即不可触及时,Class对象就 ...
- IOS基础之 (十二) 类的扩展
对OC类的扩展总结如下,共有4个: 1.子类 subClass 作用:可以使用类的继承来增添父类的变量和方法. 写法:在.h文件中 @interface Student : Person 2.分类 C ...
- OC中类别、扩展、协议与托付
类别(category)--通过使用类别,我们能够动态地为现有的类加入新方法.并且能够将类定义模块化地分不到多个相关文件里.通常仅仅在类别中定义方法. 类别,接口部分的定义,通常该文件命名为已有&qu ...
- JavaScript学习总结(十四)——JavaScript编写类的扩展方法
在JavaScript中可以使用类的prototype属性来扩展类的属性和方法,在实际开发当中,当JavaScript内置的那些类所提供的动态 ...
- C++类功能扩展预留五招
第一招虚函数 通过派生类来进行功能扩展是基本的面向对象的方式,这种方式大如下: class base { public: virtual ~base(){} virtual void fun() { ...
随机推荐
- 【原创】U盘插入磁盘显示脱机解决
问题说明:插入U盘,电脑可识别硬件,打开我的电脑,无显示U盘所在的磁盘.,并且在计算机管理的磁盘管理看到的U盘为脱机状态 解决方案:1.打开命令,输入 diskpart 回车,输入list disk ...
- [HNOI2007][BZOJ1185] 最小矩形覆盖 [凸包+旋转卡壳]
题面 BZOJ题面 前置芝士 建议先学习向量相关的计算几何基础 计算几何基础戳这里 思路 用这道题学习一下凸包和旋转卡壳 首先是凸包部分 凸包 求凸包用的算法是graham算法 算法流程如下: 找到$ ...
- CodeForces.71A Way Too Long Words (水模拟)
CodeForces71A. Way Too Long Words (水模拟) 题意分析 题怎么说你怎么做 没有坑点 代码总览 #include <iostream> #include & ...
- UVA.10305 Maximum Product (暴力)
UVA.10305 Maximum Product (暴力) 题意分析 直接枚举起点和重点,然后算出来存到数组里面,sort然后取最大值即可. 代码总览 #include <iostream&g ...
- redux connect的浅比较说明
redux的connect方法是一个高阶组件,对包装的组件会在ShouldComponentUpdate中实现一个默认的浅比较. connect形式如下: connect([mapStateToPro ...
- mysql定时器,定时查询数据库,把查询结果插入到一张表中
1.有两张表order_repayment_detail,msg_sim ,需要把前者中的按时间过滤出来的信息插入到短信发送表中,可以每晚12点钟查询执行一次查询. 创建存储过程,这里的存储过程主要提 ...
- 复习java数据库操作的总结
以前学习java数据库操作,学得那叫糊里糊涂,各种JDBC常用的类和接口根本是傻傻分不清啥是干嘛的.只是套着用用吧. 不过这次好歹清楚些了,呜呜,学习有阶段性,多次重复才有好效果,多么痛的领悟. 工程 ...
- STL之一:字符串用法详解
转载于:http://blog.csdn.net/longshengguoji/article/details/8539471 字符串是程序设计中最复杂的变成内容之一.STL string类提供了强大 ...
- 二叉树中和为某一值得路径 java实现
本题来自<剑指offer> 路径为从根节点到叶节点一条路径,路径经过的各节点数值之和等于某一给定数值,则打印路径上的节点 因为需要打印满足条件的路径节点信息和各节点之和,需要栈记录经过的节 ...
- librdkafka 源码分析
http://note.youdao.com/noteshare?id=c7ff510525b4dadaabb6f6a0a72040cc