OC第七课

主要内容:类的扩展

一、NSDate

       NSDate是Cocoa中用于管理日期和时间的基础类,封装了某一给定的时刻(含日期、时间、时区)

       使用+Date方法获取当前时间

              示例:NSDate  *nowDate = [ NSDate  date ] ; / / 获得的是0时区的时间

                         NSLog (@" %@ " , nowDate) ; / / 无论是在哪个时区,打印获得的都是0时区的时间

       NSTimelnterval (即double类型)用以表示以毫秒为单位的时间间隔

       使用  initWithTimelntervalSinceNow : 方法传入一个NSTimelnterval参数,创建一个NSDate对象

              示例:  NSDate  *tomorrowdate = [ [ NSDate  alloc ] initWithTimelntervalSinceNow : 24 * 60 * 60 ] ;

                           NSLog(@"%@" , date) ; / / 打印获取第二天这个点的时间对象

                           NSDage  *yesterdayDate = [ [ NSDate  alloc ] initWithTimelntervalSinceNow : -1 * 60 * 60 ] ;

                           NSLog(@"%@" , yesterdayDate) ; / / 打印获取昨天这个点的时间对象

       获取两个时间段的间隔

                           NSTimelnterval  time = [ tomorrowDate timelntervalSinceDate : yesterdayDate ] ;

                           NSLog (@" %0f " , time) ; / / 打印获取两个时间段的间隔(以秒为单位,若要打印分或者小时,除以60或者3600即可)

二、NSDateFormatter的使用

       NSDateFormatter是iOS中的日期格式类,功能是实现NSString和NSDate之间的互转

       指定日期格式:

               NSDateFormatter  *formatter = [ [ NSDateFormatter  alloc ] init ] ;

               [ formatter  setDateFormat : @"yyyy-MM-dd  HH:mm:ss" ] ;

       注意:指定日期格式时,里面的字母(y、M、d、H、m、s)不能改变,其他的任意改变,若H为小写时,则定义为12小时制(H为24小时制)

       NSDate(时间)  转 NSString (字符串)

       示例:时间转字符串(stringFromDate)

                NSDateFormatter  *formatter = [ [ NSDateFormatter  alloc ] init ] ;  / / 创建日期时间格式类

                [ formatter  setDateFormat : @"yyyy - MM - dd  HH:mm:ss" ] ; / / 自定义时间格式

                NSString  *string = [ formatter  stringFromDate : [ NSDate  date ] ] ; / / 调用方法,定义一个字符串接收

                NSLog(@"%@" , string ) ;  / /  打印输出

               

                时间字符串转换成对应的时间(dateFromString)

                NSDateFormatter  *formatter2 = [ ] NSDateFormatter  alloc ] init ] ; / / 创建日期时间格式类

                [ formatter  setDateFormat : @"yyyy - MM - dd  HH:mm:ss" ] ;  / /  自定义时间格式

                NSString  *string = @"" ;  / /   用字面量格式创建一个时间格式

                NSDate  *date = [ formatter2  dateFromString : string ] ;  / / 调用函数,用一个时间对象接收

                NSLog(@"%@" , date) ; / / 打印时间

                注意:字符串的格式必须与自定义时间格式相同

三、类的扩展

       Category(也叫分类或类目)

       主要作用是:为没有源代码的类添加方法,通过Category添加的方法,会成为原类的一部分,从而达到扩展一个类的功能

       创建Category的步骤:

               新建文件 -> 选择Objective - C  Category模板  ->  填写类名和分类名  ->  . h文件添加文件声明 ->   . m添加文件实现

       创建之后是这个样式:

                / / 声明

               @interface  NSString  (SayHi)

                 - (void) hi ; 

               @end

               / / 实现

               @implementation   NSString (sayHi)

                - (void) hi

                {

                           NSLog(@" Hi , body ") ;

                }

                @end

        注意:1、@interface 后面紧跟的类名表示的是你要给哪个类扩充方法

                   2、(SayHi) 小括号里面的名字表示的是当前类目的名字


        Category与子类的区别


CategorySubclass
功能只能为类添加方法既能为类添加方法,也能添加变量
特点新添加的方法会成为原始类的一部分,能被子类继承新添加的方法,只有子类有,父类不具有
使用使用原始类的实例(如果是 -方法)或者原始类(如果是 +方法)调用方法子类才能调用,如果在项目开发到尾声的时候,使用子类添加了方法,需要对已写代码做类型替换(将父类替换为子类)


          Extension

          主要作用是:管理类的 “ 私有 ” 方法

          面向对象编程也叫面向接口编程,在设计一个类的时候,有些方法需要对外公开(我们成为接口),有些方法仅仅内部使用

          Extension的语法和Category很相似,相当于把Category的 .h 文
件挪到原始类的   .m 文件中

          Extension针对的是自己的类,必须有源代码的类


CategoryExtension
作用为没有源代码的类添加方法管理类的私有方法
格式定义一对  .h 和 .m 文件把代码写到原始类的  .m 文件中



四、协议、代理

       Protocol(协议):iOS开发中常用的技术

       协议是一套标准(一堆方法的声明),只有  .h 文件,就像一张任务清单,清单交给谁,谁就要完成上面的任务

       接收协议的对象实现协议中的定义

       如何定义Protocol(以@protocol开始@end结束)

       示例

               @protocol  Marryprotocol <NSObject>

                      @required  / / 必须遵循的方法

                      - ( void ) makeMoney ;

                      - ( void ) working ;

                      @optional  / / 可以不实现的方法

                      - ( void ) wash ;

                      - ( void ) cook ;

               @end

        注意:1、协议中的方法默认是必须实现的 即 @required

                   2、关键字@optional修饰的方法是可选的,可实现可不实现

        遵循协议分两步:

                1、在类的  .h  文件父类名后面写上 <协议名>

                2、在  .m 文件中实现协议中的方法

五、delegate设计模式(很重要,必须掌握)

       Protocol(协议)使用的核心场景是实现delegate设计模式

       通俗的讲就是:

              自己不想做的,想让别人去实现的时候,就可以指定一个代理,让代理帮你做,你只需要通知代理去做某事

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值