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() { ...
随机推荐
- DFS染色解决区域分块问题UVALive 6663
怪我比赛的时候想法太过于杂乱了. 注重于区域的属性了.甚至还想用状态压缩或者是hash来描述分块的区域. 其实我们的可以宏观的角度去审视这个问题.就是求分区的问题.那么我们完全可以标记边框的值为1.即 ...
- PyTorch为何如此高效好用?
C/C++中 Python 扩展对象的简介 你可能知道可以借助 C/C++扩展 Python,并开发所谓的「扩展」.PyTorch 的所有繁重工作由 C/C++实现,而不是纯 Python.为了定义 ...
- BZOJ1591 & 洛谷2924:[USACO2008 DEC]Largest Fence 最大的围栏——题解
http://www.lydsy.com/JudgeOnline/problem.php?id=1591 https://www.luogu.org/problemnew/show/P2924#sub ...
- [Leetcode] Sum root to leaf numbers求根到叶节点的数字之和
Given a binary tree containing digits from0-9only, each root-to-leaf path could represent a number. ...
- 学习操作Mac OS 之 常用命令
~ 符号在 Mac 甚至所有基于 Unix 和 Linux 的系统中都是代表当前用户的用户目录,.代表当前目录 配置环境变量语句: source ~/.bash_profile 查看host文件语句 ...
- bzoj3810: [Coci2015]Stanovi(记忆化搜索)
实际上切出来的矩阵在原矩阵上的位置是不重要的...重要的只有矩阵的大小和上下左右是否在边界上. 于是我们可以设f[x][y][l][r][u][d]表示x*y的矩阵上下左右是不是边界的最小代价. 记忆 ...
- BZOJ1999 NOIP2007 洛谷P1099 P2491 SDOI 2011
Description: 设T=(V, E, W) 是一个无圈且连通的无向图(也称为无根树),每条边到有正整数的权,我们称T为树网(treebetwork),其中V,E分别表示结点与边的集合,W表示各 ...
- nfs挂载权限问题
问题: 服务器A:192.168.10.230 服务器B:192.168.10.231 由于服务器A空间不足,打算将服务器A产生的数据库日志挂载到服务器B上,刚开始设定的anonuid和anongid ...
- CentOS 6.5 下安装 QT 4
1. 获取下载地址 从我到网盘下载: qt-creator-opensource-linux-x86_64-3.5.1.run qt-everywhere-opensource ...
- CCPC-Winter Camp div2 day5
DIV2 有部分div1的题会写 div1的大佬真的太强了 向他们学习 (好像和zqc大佬说过话了hhh,zqc大佬真的是一个超有意思的人啊,羡慕有妹子队友的zqc大佬) A: 你有一棵树,你想把它画 ...