OC 07 类的扩展

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

@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,主要的任务是帮你带孩子、 做饭、洗衣服等。

使?场景:凡是某些任务??不去实现,想让别人去实现的时候, 就可以指定?个代理,让代理帮你去做。你只需要通知代理去做某事。

				
时间: 2024-10-12 21:20:36

OC 07 类的扩展的相关文章

OC学习-类的扩展

类目-Category 作用:主要为没有源代码的类添加方法(比如系统的类) 定义Category 新建文件 选择OC Category模板 填写类和分类名 在.h中添加方法声明 在.m中添加方法实现 声明Category NSString+StringMethod.h @interface NSString (StringMethod) - (void)sayHi; @end NSString+StringMethod.m @implementation NSString (StringMeth

OC --(7)-- 类的扩展

一.NSDate和NSDateFormatter 在iOS开发中,NSDate的使用场景很多,比如:聊天程序里:几分钟前,昨天,几天前的计算;网络请求中的时间戳(计算当前时间距 离1970年1月1日的秒数) 二 .NSDate的使用 三.NSTimeinterval

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

类别(category)--通过使用类别,我们可以动态地为现有的类添加新方法,而且可以将类定义模块化地分不到多个相关文件中.通常只在类别中定义方法. 类别,接口部分的定义,通常该文件命名为已有"类+类别名.h" @interface 已有类 (类别名) //.......方法实现 @end 例如,考虑为NSNumber增加一个类别,则接口部分代码如下 <p style="margin-top: 0px; margin-bottom: 0px; font-family:

类的扩展(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

类的扩展--类目--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 01 类和对象

一.  定义OC的类和创建OC的对象 接下来就在OC中模拟现实生活中的情况,创建一辆车出来.首先要有一个车子类,然后再利用车子类创建车子对象 要描述OC中的类稍微麻烦一点,分2大步骤:类的声明.类的实现(定义).跟函数类似,函数有分声明和定义 1.     类的声明 1)       代码编写 定义一个Car类,拥有2个属性:轮子数.时速,1个行为:跑 类名\属性的命名规则:标示符的规则 类名的命名规范:有意义.驼峰标识.首字母大写 #import <Foundation/Foundation.

OC 导入类 #import和@class 区别复习

objective-c中#import和@class的区别 在Objective-C中,可以使用#import和@class来引用别的类型, 但是你知道两者有什么区别吗? @class叫做forward-class,  你经常会在头文件的定义中看到通过@class的引用, 原因就是当你只用@class来引入一个类时, 编译器知道有这么一个类,也就是说它能识别Engine *engine; 而在implementation文件中,如果你想要访问engine.price, 编译器就会出错, 即使你用

通讯聚合类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

视频iOS之02第一个OC的类

OC是一门面向对象的语言,因此它也有类.对象.静态\动态方法.成员变量的概念.这讲就来创建第一个OC的类. 第一个类的源码: 1 /* 2 人 3 类名:Person 4 属性(成员变量\实例变量):体重.年龄 5 行为(方法):走路.吃 6 */ 7 8 #import <Foundation/Foundation.h> 9 10 //1.类的声明 11 @interface Person : NSObject 12 { 13 @public 14 int age; 15 double we