Objective -C NSDate、Category   、Extension、Protocol

NSDate的使用

  • NSDate是Cocoa中用于处理日期和时间的基础类,封装类某一给定的时刻,具体的日期,时间和时区
  • 使用+date方法获取当前日期和时间
  • 例如  :NSDate*nowDate = [NSDate date];
  • 注意,,NSLog(@“%@”,nowDate); 无论你是哪个时区的时间,打印时间,打印时总是打印对应的0时区时间

NSTimeinterval

  • NSTimeInterval(即double类型) 用以表示以秒为单位的时间间隔
  • 可以使用-initWithTimeIntervalSinceNow:方法传入一个NSTimeInterval参数,创建一个 NSDate对象
  • 例如:NSDate * tomorrowDate = [[NSDate alloc] initWithTimeIntervalSinceNow:24*60 * 60];
  • NSDate * yesterdayDate = [[NSDate alloc] initWithTimeIntervalSinceNow:-1 * 24*60 *60];
  • 取两个时间对象的间隔:NSTimeinterval = [tomorrowDate timeIntervalSinceDate:yesterdayDate];

NSDateFormatter的使用

1.

  • NSDateFormatter是iOS中的日期格式类,主要的功能是实现 代表日期的NSString和
  • SDate的互转,提供了系统预置的字符串格式,还允许用户自定义字符串格式。 我们可以设置时区、月的名称、纪元的符号、local、calender、AM/PM、weekday的符号
  • 常见的时间格式化字符串有以下一些: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"];

2.

  • NSDateFormatter可以将日期转化为相对应的字符串,同样可以将字串转化为相对应的日期。
  • 日期转化为字符串: NSDateFormatter*formatter =NSDateFormatter alloc] init];
  • [formatter setDateFormat:@"yyyy-MM-dd hh:mm:ss"];
  • NSString *dateString=[formatter stringFromDate: [NSDate date]];

3.

  • 时间字符串转化为相对应的日期:NSDateFormatter * formatter =[[NSDateFormatter alloc] init];
  • [formatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
  • NSString * dateStr = @”2008-08-08 20:08:08”; NSDate * date = [formatter dateFromString:dateStr];

类目Category

  • Category也叫分类或类目
  • 主要作用是为 没有源代码 的类添加方法。
  • 通过Category添加的方法会成为原类的一部分。从而达到扩展一 类的功能。

Category的定义

  • 新建文件
  • 选择Objective-C Category模板
  • 填写类名和分类名
  • .h文件添加方法声明
  • .m添加方法实现
  • 需要使用的地方进行调用。

Category的声明

  • NSString+SayHi.h文件
  • @interface NSString (SayHi)
  • - (void)hi;
  • @end

Category的实现

  • NSString+SayHi.m文件
  • #import “NSString+SayHi.h”
  • @implementation NSString(SayHi)
  • - (void)hi{
  • NSLog(@”这是通过category为NSString添加的hi方法”);
  • }
  • @end

Category与子类的区别

Extension

  • Extension的主要作用是为类添加“私有”方法。
  • 面向对象编程的另外一个名字叫面向接口编程。
  • 我们在设计一个类的时候,有些方法需要对外公开(我们称为接口),有些方法可能仅仅内部使用(比如:是某个方法的一个小步骤)。
  • Extension的功能是帮我们去管理这些内部使用的方法(“私有”方 法)。

定义Extension

  • Extension的语法格式和Category很相似
  • 相当于把Category的.h文件挪到了原始类的.m文件中
  • Extension针对的是的类,必须有源代码的类

定义Extension

  • xxx.m文件
  • @interface xxx (ExtensionName)
  • //你的方法列表
  • @end

Extension的实现

  • @implementation xxx
  • //方法的实现
  • @end

Category和Extension的区别

Protocol

  • Protocol又名协议,是iOS开发中常用的技术。
  • 协议是一套标准(一堆方法的声明),只有.h文件。
  • 接受协议的对象实现协议中定义的方法

Protocol


  • 协议就像一张任务清单(或便利贴),上面写了一堆需要处理的事。清单交给谁,谁就要去完成清单上规定的任务。
  • 协议定义好之后,需要有类去遵守这个协议,实现协议里面的方法。
  • 遵守协议即在.h文件的父类名后写上<协议名]]>。实现协议里的方法即在.m文件中实现协议中的方法。相当于给这个类添加了若干个
  • 方法。这个类的实例就可以调用这些方法。

定义Protocol

  • @protocol开始,以@end结束,例如:
  • @protocol MarryProtocol <NSObject>
  • - (void)makeMoney;
  • @optional    //可选的协议,
  • - (void)washcloth;
  • - (void)cook;
  • @end
  • 协议中的方法默认是必须实现的,即@required关键字 @optional 修饰的方法是可选的,可实现也可不实现。

如何遵守协议

  • #import “MarryProtocol”
  • #这里要引入协议的头文件
  • @interface Boy : NSObject <MarryProtocl>
  • ...
  • @end
  • @implementation Boy
  • //协议中方法的实现
  • @end

delegate设计模式

  • Protocol的核心使用场景是实现delegate设计模式。
  • delegate音译代理。通俗的讲就是代理商,主要的任务是帮你完成一些任务。
  • 比如:保姆就可以认为是delegate,主要的任务是帮你带孩子、做饭、洗衣服等。

Objective -C NSDate、Category   、Extension、Protocol

时间: 2024-08-07 08:39:35

Objective -C NSDate、Category   、Extension、Protocol的相关文章

xcode6中如何创建category,extension,protocol

我想有很多朋友们也跟我有过这样的疑惑,那就是新的Xcode6如何新建一个category,extension,protocol文件,也有很多人尽管自己去尝试找过了,但是没有找到,而不是Xcode6没有这个功能,而是你不够仔细.今天小农在经过几番寻找,才找到这个创建的方法. 无论是Mac端还是iOS端口,均是选择source下的oc file,如下所示: 选中后点击下一步: 看到了吗,下拉菜单可以选择你想要创建的文件.接下来,还可以选择你的原始类: 到这里,相信大家都明白了.我也不再赘述.

iOS Category与Extension、Delegate的认识

Catrgory与Extension.Delegate的区别与用法 苹果的官方文档 Category在iOS开发中使用非常频繁.尤其是在为系统类进行拓展的时候,我们可以不用继承系统类,直接给系统类添加方法,最大程度的体现了Objective-C的动态语言特性. #import @interface NSObject (Category) - (void)myMethod; @end 这是一个最简单的Category,作用于NSObject类,给NSObject添加了一个方法. 使用Categor

第七讲.NSDate,category(分类),extension(延展),protocol(协议),delegate(代理)

一.掌握NSDate和NSDateFormatter的使用 NSDate是Cocoa中?用于处理日期和时间的基础类,封装了某一给定的时刻(含日期,时间,时区). 了解NSDate的创建,如何计算当前时间,时间间隔,以及时间日期与字符之间的互转. 1>.NSDate创建,当地时间计算,时间按间隔计算,时间与字符之间的互转 练习题1:计算当前时间与一个固定时间按的时间差 练习二:字符串转化为日期对象 二.掌握Category的定义和使用(只能为类扩展类方法或实例方法) 1.主要作用是为:没有源代码的

Intent属性详解二 Action、Category

先看效果图: 1.Action:该activity可以执行的动作 该标识用来说明这个activity可以执行哪些动作,所以当隐式intent传递过来action时,如果跟这里<intent-filter>所列出的任意一个匹配的话,就说明这个activity是可以完成这个intent的意图的,可以将它激活! 常用的Action如下所示: ACTION_CALL activity 启动一个电话. ACTION_EDIT activity 显示用户编辑的数据. ACTION_MAIN activit

Objective—C语言的新魅力——Nullability、泛型集合与类型延拓

Objective-C语言的新魅力 一.引言 在Xcode7中,iOS9的SDK已经全面兼容了Objective-C的一些新特性和新功能.这些功能都只作用于编译期,对程序的运行并没有影响,因此,它可以很好的向下进行兼容,无缝的衔接低版本的iOS系统,那么这些特性有什么样的用处呢,作为开发者,我保证你一定会爱上他们,如果你可以将这些新特性都应用于你的开发,你的开发效率和代码质量,相比之前,会有一个很大的提升. 二.Nullability检测的支持 在swift语言中,通过!和?可以将对象声明成Op

autorelease、Block、Category、ARC

1.autorelease方法的基本作用 给对象发送一条autorelease消息, 会将对象放到一个自动释放池中 当自动释放池被销毁时,会对池子里面的所有对象做一次release操作 会返回对象本身 调用完autorelease方法后,对象的计数器不变 autorelease的好处 : 不用再关心对象释放的时间 不用再关心什么时候调用release autorelease的使用注意 占用内存较大的对象不要随便使用autorelease 占用内存较小的对象使用autorelease,没有太大影响

指定Action、Category调用系统Activity

1.Intent对象详解 Android的应用程序包含三种重要组件:Activity.Service.BroadcastReceiver,应用程序采用一致的方式来启动它们----都是依靠Intent来进行启动的,Intent就封装了程序想要启动程序的意图,不仅如此,Intent还用于与被启动组件进行交换信息. 组件类型 启动方法 Activity startActivity(Intent intent) startActivityForResult(Intent intent,intreques

【转】Objective-C——消息、Category和Protocol

Objective-C——消息.Category和Protocol 原文: http://www.cnblogs.com/chijianqiang/archive/2012/06/22/objc-category-protocol.html [注意]protocol本身是可以继承的 面向对象永远是个可以吐槽的话题,从开始提出到推崇备至,到充满质疑,一路走来让人唏嘘不已.面向对象的思想可谓历史悠久,20世纪70年代的Smalltalk可以说是面向对象语言的经典,直到今天我们依然将这门语言视为面向对

iOS知识树,知识目录(包括对象、Block、消息转发、GCD、运行时、runloop、动画、Push、KVO、tableview,UIViewController、提交AppStore)

本文旨在总结iOS知识网络,该知识网络罗列出常见UIKit,Foundation的对象特点和一些使用经验:文本编辑采用树的形式,对知识点进行罗列,并标注一些使用经验(★)希望对初学者有用或给一些解决疑难杂症者提供思路:某些知识点会深入探讨:通过总结希望站在一个较高平台的角度全观Objective-C.知识树中有些是原创文章,有些则是转载网络上iOS大神的文章.笔者会尽量详细的介绍各个知识点.当然一个人的知识面是相当有限的,在给各位读者提供知识参考的同时,欢迎大家对本文提意见. /->UIView