oc NSDate 及 类的扩展

?、NSDate

1、?络请求中的时间戳

计算当前时间距离1970年1?1?的秒数

2、关于时区

24个时区  北京东八区

NSDate输出的永远是0时区的时间 英国

格林尼治时间 GMT Greenwich Mean Time

3、NSDate使用

// 创建日期:表示当前的时间
    NSDate * nowDate = [NSDate date];

// 创建日期:以当前时间为参考点,创建表示昨天这个时间的日期对象

double oneDay = 24*3600;
    NSDate * yesterday = [NSDate dateWithTimeIntervalSinceNow:-oneDay];
    NSDate * since2001 = [NSDate dateWithTimeIntervalSinceReferenceDate:0];
    NSDate * since1970 = [NSDate dateWithTimeIntervalSince1970:0];
    NSDate * sinceAnyDay = [NSDate dateWithTimeInterval:oneDay sinceDate:since2001];
    // NSTimeInterval 是double类型
    NSTimeInterval interval = [sinceAnyDay timeIntervalSinceDate:since2001];
   
    // 获取时间戳: 当前时间距离1970之间的时间差

NSTimeInterval time = [[NSDate date] timeIntervalSince1970];

?、掌握NSDateFormatter的使?

#pragma mark -- NSDateFormatter 日期格式化类 --
    // NSDate to NSString
    NSDateFormatter * format1 = [[NSDateFormatter alloc] init];
    // 设定格式
    // 年y 月M 日d 小时h(1-12 am/pm) H(0-23) 分m 秒s z时区
    [format1 setDateFormat:@"y-M-d h:m:s MMMM zzzz"];
    NSString * str1 = [format1 stringFromDate:[NSDate date]];
   
    // NSString to Date
    NSString * timeStr = @"2014年5月1日 10点23分22秒";
    NSDateFormatter * format2 = [[NSDateFormatter alloc] init];
    [format2 setDateFormat:@"y年M月d日 h点m分s秒"];

NSDate * date = [format2 dateFromString:timeStr];

三、类目Category的定义和使?

1、类目的作用

为原始的类扩展新的方法,扩展的方法会成为原始类的一部分,亦可被子类继承

2、创建文件

Command+N -> source -> Objective-c File ->

File:Addition

File Type:Category

Class:NSString

3、类目的使用

NSString+Addition.h

// 类目的接口部分

// 类目通常是给没有源代码的类添加新的方法。备注:不能添加实例变量!!!

@interface NSString (Addition)

- (NSUInteger)length;     // Never do It! 可以但绝对不允许在类目中重新实现已经定义的方法.  //因为类目中方法的优先级高于源代码中的方法(但系统方法除外[有保护])

- (void)str_sayHi;     // 推荐:类目的方法名加前缀

@end

NSString+Addition.m

// 类目的实现部分

@implementation NSString (Addition)

- (void)str_sayHi
{
    // 在实例方法中,self表示调用这个方法的对象
    NSLog(@"%@", self);

}

@end

四、Extension(延展)

延展是匿名的类目

延展的作用

延展要写在.m文件中,主要作用是管理“私有”方法

优点

外部声明与内部延展区分开,提高代码质量,提高可读性。方便管理

使用

.h文件是提供类的外部使用的; .m是类自己使用的,不对外公开。

延展只有接口部分,没有实现部分。在类的实现部分实现延展的方法

Person.m:

@interface Person ()
{
    NSString * _gender;

}

// 自我介绍

- (void)introduce;

// 不要以_开头,_是系统类用的

- (void)p_sayHello;

@end

@implementation Person

- (void)sayHi
{
    [self introduce];

}

- (void)introduce
{
    NSLog(@"Extension: introduce method");

}

- (void)p_sayHello
{
    NSLog(@"Hello Extension");

}

@end

五、Protocol(协议)

1、定义协议

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

Command+N -> source -> Objective-c File ->

File:MarryProtocol

File Type:Protocol

@protocol MarryProtocol <NSObject>

// 必须实现(默认)

@required

- (void)makeMoney;

// 可选实现

@optional

- (void)cook;

- (void)wash;

@end

2、遵守协议

分两步:

1、在类的.h?件 ?类名后写上<协议名>。

2、在.m?件中实现协议中的?法。

Boy.h:

#import <Foundation/Foundation.h>

#import "MarryProtocol.h"

@interface Boy : NSObject <MarryProtocol>

@end

Boy.m:

#import "Boy.h"

@implementation Boy

- (void)makeMoney
{
    NSLog(@"boy makeMoney");

}

- (void)wash
{
    NSLog(@"boy wash");

}

- (void)cook
{
    NSLog(@"boy cook");

}

@end

承上

协议作用:解耦合

Protocol的核?使?场景是实现delegate设计模式。

协议方法<==>委托方法

启下

六、delegate

代理设计模式内容

找代理的对象(家庭),作为代理的对象(保姆)

代理设计模式实现

(1)找代理的对象(家庭)定义协议,协议中是代理对象(保姆)需要实现的方法

(2)作为代理的对象(保姆)要遵守协议,实现协议方法

(3)设置代理对象

家庭类,保姆类  让保姆对象作为家庭的代理,实现:看小孩、做饭

FamilyProtocol.h

@protocol FamilyProtocol <NSObject>

@required
- (void)cook;
@optional
- (void)lookAfterBaby;

@end


Housemaid.h

#import "FamilyProtocol.h"

@interface Housemaid : NSObject <FamilyProtocol>

@end


Housemaid.m

@implementation Housemaid

- (void)lookAfterBaby{

NSLog(@"Housemaid take care of Baby");

}

- (void)cook{

NSLog(@"Housemaind cook.");

}

@end

Family.h

#import "FamilyProtocol.h"

#import "Housemaid.h"

@interface Family : NSObject{

Housemaid<FamilyProtocol> * _delegate;
}
#pragma mark -- delegate的setter方法 --

- (void)setDelegate:(id<FamilyProtocol>)delegate;

- (void)hungry;

- (void)cry;

@end

Family.m

@implementation Family
#pragma mark -- delegate的setter方法 --
- (void)setDelegate:(id<FamilyProtocol>)delegate
{
    _delegate = delegate;

}

- (void)hungry
{
    NSLog(@"Hungry!");
    if ([_delegate respondsToSelector:@selector(cook)]) {
        [_delegate cook];
    }
}
- (void)cry
{
    NSLog(@"The baby is crying");
    if ([_delegate respondsToSelector:@selector(lookAfterBaby)]) {
        [_delegate lookAfterBaby];
    }
}

@end


main.m

...

Housemaid * h = [[Housemaid alloc] init];

Family * f = [[Family alloc] init];

[f setDelegate:h];

[f hungry];

[f cry];

...

扩展类的四种方法:1:类目、2:延展、3:协议、4:子类(、5:修改源代码)

时间: 2024-08-24 12:35:52

oc NSDate 及 类的扩展的相关文章

OC第九节 类的扩展

1.Category  类目 ①. 类目是为系统内部的类或者是没有源代码的类添加方法,不能添加实例变量 ②. 添加的方法会被称为原类的一部分,子类照样可以使用 ③. 类目的文件名为 原名 + 文件名 (例如:NSString+Wuyaun) ④. 既可以添加实例方法,也可以添加类方法 2.extension  延展 ①. 延展是为自定义的类扩展功能的 ②. 在的.m文件上方,使用@interface关键字构建扩展 ③. 在延展中,我们既可以声明方法,也可以声明实例变量或者属性 ④. 添加的内容属

OC - 时间日期类NSDate

OC - 时间日期类NSDate //NSDate 时间日期类 NSDate 二进制数据流 { //1.获取当前时间 零时区的时间 //显示的是格林尼治的时间: 年-月-日 时:分:秒:+时区 NSDate *date = [NSDate date]; NSLog(@"当前零时区时间 %@", date); //2.获得本地时间 东八区 晚八个小时 以秒计时 NSDate *date1 = [NSDate dateWithTimeIntervalSinceNow:8 * 60 * 60

类的扩展(Extension , NSData, NSDateFormatter, Category, Extension, Protocol, delegate)

类的扩展         OC数据类型         1.NSInteger, NSUInteger         2.CGFloat         3.NSString, NSMutableString         4.NSArray, NSMutableString         5.NSNumber         6.NSDictionary, NSMutableDictionary         7.NSSet, NSMutableSet              NSD

OC category (分类,类目),日期类常用用法

学了这么久OC我们都知道OC中的类分为系统类和自定义的类,当我们在使用系统为我们提供的类时有时往往不能满足我们的需要,例如,字符串NSString类提供了比较字符串的方法compare,为数组排序时系统默认的是升序,当需要为数组按降序排序时,一种途径是需要新建一个类写一个降序的方法,而另一个途径就是系统提供的category(分类,类目),分类(类目,category)的目的为了给没有源代码的类添加方法(只能添加方法,不能添加实例变量),是扩充一个类功能的方式之一,为原有类扩充的方法会成为原类的

OC中协议, 类目, 时间, 延展, 属性

必须接受marryprotocol协议, id<marryprotocol>基于类型的限定, 才能给实例变量赋值 @property (nonatomic, assign) id<marryprotocol> husband; 避免Optitonal没有实现的功能 if ([_husband respondsToSelector:@selector(driver)]) { [_husband driver]; } @required//必须实现的协议, 默认协议 - (void)s

iOS OC07.2_类的扩展

类目 //1.系统已经写好的类目:按照功能对系统的类方法进行区分 //[email protected]开始,后面是当前类的名字,类名后面是分类的功能,到@end结束 //2.我们创建的类目,一般是为了把系统的类进行功能扩充 // NSString *[email protected]"2015-07-12 10:00:00"; // NSString *[email protected]"2015-07-12 09:00:00"; //// [str sayHi]

类的扩展--类目--ios

person+money.h  这是类目类 #import "Person.h" //这是扩展person类的接口类,独立一个文件 @interface Person (Money) -(void) haveMoney; @end person+money.m 这是类目类 #import "Person+Money.h" //这是扩展person类的实现类,独立一个文件 @implementation Person (Money) -(void) haveMoney

OC -- 第一个类

类名:Car 属性:轮胎个数.时速 行为:跑 完整写一个类:类的声明和实现 1.    类的声明 代码: // NSObject 再Foundation框架中 #import <Foundation/Foundation.h> // NSObject 基类 @interface Car : NSObject { // 声明对象属性(成员变量,默认会初始化为0) @public int  wheels;  // 轮胎个数 int  speed;  //  时速 } // 方法(行为) // 只要

通讯聚合类Chrome 扩展:All-in-One Messenger,把主流聊天服务聚合在一个应用窗口内

原文地址:http://whosmall.com/?post=420 本文标签: Chrome扩展 Chrome浏览器 通讯聚合类Chrome扩展 All-in-One-Messenger 主流聊天服务聚合 我发现了 All-in-One Messenger,它是一款轻量的 Chrome 扩展,作用与 Franz基本相同,只需要打开一个窗口,所有的通讯服务会以网页标签栏的形式呈现,方便你自如切换,可以大大提高了沟通的效率.但是和「庞大」的 Franz 相比,All-in-One Messenge