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

@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 类的扩展的更多相关文章

  1. OC基础:类的扩展.协议 分类: ios学习 OC 2015-06-22 19:22 34人阅读 评论(0) 收藏

    //再设计一个类的时候,有些方法需要对外公开(接口),有些仅供内部使用. 类的扩展:为类添加新的特征(属性)或者方法 对已知类: 1.直接添加 2.继承(在其子类中添加实例变量和方法) 3.使用ext ...

  2. OC: 类的扩展、类的延展、协议、 NSDate

      NSDateFormatter 指定⽇日期格式: NSDateFormatter * formatter = [[NSDateFormatter alloc] init]; [formatter ...

  3. OC分类(类目/类别) 和 类扩展 - 全解析

    OC分类(类目/类别) 和 类扩展 - 全解析   具体见: oschina -> MyDemo -> 011.FoundationLog-OC分类剖析 http://blog.csdn. ...

  4. OC中类别、扩展、协议与委托

    一.类别(category) 类别(category)——通过使用类别,我们可以动态地为现有的类添加新方法,而且可以将类定义模块化地分不到多个相关文件中.通常只在类别中定义方法.(类别,接口部分的定义 ...

  5. Java虚拟机JVM学习07 类的卸载机制

    Java虚拟机JVM学习07 类的卸载机制 类的生命周期 当Sample类被加载.连接和初始化后,它的生命周期就开始了. 当代表Sample类的Class对象不再被引用,即不可触及时,Class对象就 ...

  6. IOS基础之 (十二) 类的扩展

    对OC类的扩展总结如下,共有4个: 1.子类 subClass 作用:可以使用类的继承来增添父类的变量和方法. 写法:在.h文件中 @interface Student : Person 2.分类 C ...

  7. OC中类别、扩展、协议与托付

    类别(category)--通过使用类别,我们能够动态地为现有的类加入新方法.并且能够将类定义模块化地分不到多个相关文件里.通常仅仅在类别中定义方法. 类别,接口部分的定义,通常该文件命名为已有&qu ...

  8. JavaScript学习总结(十四)——JavaScript编写类的扩展方法

    在​J​a​v​a​S​c​r​i​p​t​中​可以使​用​类的p​r​o​t​o​t​y​p​e属性来​扩​展​类的属​性​和​方​法,在实际开发当中,当JavaScript内置的那些类所提供的动态 ...

  9. C++类功能扩展预留五招

    第一招虚函数 通过派生类来进行功能扩展是基本的面向对象的方式,这种方式大如下: class base { public: virtual ~base(){} virtual void fun() { ...

随机推荐

  1. 【BZOJ5297】【CQOI2018】社交网络(矩阵树定理)

    [BZOJ5297][CQOI2018]社交网络(矩阵树定理) 题面 BZOJ 洛谷 Description 当今社会,在社交网络上看朋友的消息已经成为许多人生活的一部分.通常,一个用户在社交网络上发 ...

  2. MySQL中数据表的基本操纵

    本文基于对国家863中部软件孵化器编著的<MySQL从入门到精通>一书的操作实践.  一.创建数据表 数据表属于数据库,在创建数据表之前,应该使用语句 USE 数据库名  指定操作是在那个 ...

  3. Hydra—密码爆破神器

    公司邮箱系统密码复杂度规则:字母大小写.数字.特殊字符,四选三,长度8位以上.这种复杂度的密码看着是比较安全的,但因历史原因,邮箱系统开放了外网登陆权限,加之公司人数众多,必然会有少量员工把自己的密码 ...

  4. 算法复习——欧拉回路(uoj117)

    题目: 题解: 欧拉回路相关定理(相关定义和证明请参见其他资料): 1.欧拉回路 (1)有向图:所有点的出度都等于入度为该图为欧拉图(存在欧拉回路)的充要条件. (2)无向图:所有点的度都为偶数为该图 ...

  5. Eclipse的Project Facets属性设置解决项目无故报错

    新检出项目,发现代码无故报错,各种尝试,最终发现是因为  项目右键中的 project Facets 属性中的 java 后面的 version 版本和项目 build path 的 jdk 版本不一 ...

  6. HDU2647 topsort

    Problem Description Dandelion's uncle is a boss of a factory. As the spring festival is coming , he ...

  7. 使用自己的数据集训练和测试"caffenet"

    主要步骤可参考: http://blog.csdn.net/u010194274/article/details/50575284 补充几点: 1. convert函数是ImageMagick包里面的 ...

  8. 查看Django版本

    python -m django --version dd

  9. centos上tensorflow一键安装脚本

    鉴于tensorflow在centos上安装相当麻烦,特地制作了一个脚本方便以后移植到其它机器上,脚本含有其它python常用包: #! /bin/bash   sudo yum install -y ...

  10. 基于Bootstrap的遮罩层,带有加载提示

    1.body中的html <div class="modal fade" id="loadingModal"> <div style=&quo ...