iOS开发学习第二十课——类的扩展 / 日期类

1.NSDate: 日期类
NSDate  *date = [ NSDate date ];
         NSLog ( @"%@" , date);
       
  // 格式 : - -   : :   时区
       
       
  //NSTimeInterval:  时间的计算单位 ,  ,  实质是 double
       
  // 一分钟以后
       
  NSDate  *date1 = [ NSDate  dateWithTimeIntervalSinceNow :60];
       
  NSLog ( @"%@" , date1);
       
       
  // 昨天的现在时刻
       
  NSDate  *date2 = [ NSDate  dateWithTimeIntervalSinceNow :-24 * 60 * 60];
       
  NSLog ( @"%@" , date2);
       
  // 明年的现在时刻
       
  NSDate  *date3 = [ NSDate  dateWithTimeIntervalSinceNow :366 * 24 * 60 * 60];
       
  NSLog ( @"%@" , date3);
       
       
  // 昨天的现在时刻    明年的现在时刻  间隔多少秒
       
  NSTimeInterval  seconds = [date2 timeIntervalSinceDate :date3]; // 前面的时间  -  后面的时间
       
  NSLog ( @"%.2lf" , seconds);
       
       
  // 现在时刻    1970 1 1   间隔多少秒 ( 时间戳 )
       
  NSTimeInterval  interval = [date  timeIntervalSince1970 ];
       
  NSLog ( @"%lf" , interval);
       
       
  // 时间戳 : 某一时刻距离 1970 1 1 日的秒数
       
  // 时间戳转日期
       
  NSTimeInterval  interval1 = 1425956499;
       
  NSDate  *date4 = [ NSDate dateWithTimeIntervalSince1970 :interval1];
       
  NSLog ( @"%@" , date4);
       
       
  // 做一个练习 , 计算当前时间和一个固定时间的差值,如果差值在 60 秒内,输出 刚刚 ,如果在 60 秒外 3600 秒内,输出 “xx 分钟前 ,如果 3600 秒外, 3600*24 秒内,输出 “xx 小时前
       
  // 当前时间
       
  NSDate  *nowDate = [ NSDate  date ];
       
  // 固定时间
       
  NSDate  *aDate = [nowDate  dateByAddingTimeInterval :3600];
       
  // 当前时间和固定时间的间隔
       
  NSTimeInterval  time = [aDate timeIntervalSinceDate :nowDate];
       
  if  (time < 60) {
           
  NSLog ( @" 刚刚 " );
        }
  else  if  (time < 3600 ) {
           
  NSLog ( @"%d 分钟前 " , ( int )time / 60);
        }
  else  if  (time < 3600 *24 ) {
           
  NSLog ( @"%d 小时前 " , ( int )time / 3600);
        }
  else  {
           
  NSLog ( @"%@" , nowDate);
        }
       
        2.NSDateFormatter:
  日期格式类
        NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
       
  // 设置日期格式
       
  //yyyy, YYYY:  四位年份
       
  //yy, YY:  两位年份
       
  //MM:  两位月份 ,  不足补 0
       
  //M:  一位月份
       
  // :  月份必须大写
       
  //dd:  两位日期 ,  不足补 0
       
  //d:  一位日期
       
  // 注意 :  日期必须小写 ,  大写表示当前日期为一年的第几天
       
  //hh:  两位 12 进制小时 ,  不足补 0
       
  //h:  一位 12 小时进制
       
  //HH:  两位 24 进制小时 ,  不足补 0
       
  //H:  一位 24 小时进制
       
  //mm:  两位分钟 , 不足补 0
       
  //m:  一位分钟
       
  // :  分钟必须小写
       
  //ss:  两位秒数 ,  不足补 0
       
  //s:  一位秒数
       
  // :  秒数必须小写
       
        [
formatter  setDateFormat: @"yyyy-MM-dd HH:mm:ss" ];
       
        3.NSTimeZone:
  时区类
       
  // 设置时区
       
  //NSTimeZone *timeZone = [NSTimeZone timeZoneWithName:@"china"];//cn, beijing
        NSTimeZone *timeZone = [NSTimeZone timeZoneForSecondsFromGMT:8 * 60 * 60];
       
        [
formatter  setTimeZone: timeZone ];
       
  // 把某一时刻的日期 ,  按照规定好的格式 ,  转换成字符串
       
  NSString  *string = [ formatter  stringFromDate:[ NSDate date ]];
       
  NSLog ( @"%@" , string);
       
       
  // 将字符串 @“2014 05 01   10 23 18 转换为 NSDate 对象。
       
  NSString  *dateString =  @"2014 05 01   10 23 18 " ;
       
       
  NSDateFormatter  *formatter1 = [[ NSDateFormatter  alloc ] init ];
        [formatter1
  setDateFormat : @"yyyy MM dd   HH mm ss " ];
        [formatter1
  setTimeZone :[ NSTimeZone timeZoneWithName : @"GMT" ]];
       
  NSDate  *newDate = [formatter1  dateFromString : @"2014 05 01   10 23 18 " ];
       
  NSLog ( @"%@" , newDate);
       
        4.
类的扩充
       
  //(1) 对于已知类 ( 可以查看 .m 文件 ) 进行扩充
       
  // 修改类的源文件
        Pen *pen = [[Pen alloc] init];
        [pen draw];
       
       
  //(2) 对于未知类 ( 不能查看 .m 文件 ) 继续扩充
       
  //a. 继承 ( 子类化 ),  子类重写父类的方法 ,  扩充自己的方法
        Pencil *pencil = [[Pencil alloc] init];
        [pencil draw];
        [pencil write];
       
       
  //b.Category:  分类 ,  类目
       
  // 文件名 :  类名  +  分类名 .h,  类名  +  分类名 .m
        [
NSString  helloWorld];
       
       
  // 使用分类为未知类进行扩充的步骤
       
  //(1) 新建文件
       
  //(2) 选择 Objective-C file 模板
       
  //(3) 填写分类名 ,  选择 Category,  选择要扩充的类
       
  //(4) .h 中写方法声明 ,  .m 中写方法实现
       
  //(5) 引入头文件 ,  使用扩充方法
       
       
  //1. 一般用于对系统类进行扩充方法
       
  //2. 分类中不能添加实例变量
       
       
  // 做个练习 ,  使用分类的方式 ,  Pen 扩充一个 sayHi 方法
        [Pen sayHi]
       
       
  //Extension:  延展 ,  为类扩充私有方法声明 ,  实例变量
       
  // 文件 :  类名 _ 延展名 .h
       
       
  // 延展的两种写法
       
  //(1) 通过模板创建 .h,  然后在类的 .m 中引用
       
  // ; 这种写法的弊端 ,  如果你把 .h 引用到其他文件 ,  在其他文件中也可以调用私有方法
       
       
  //(2) 直接在 .m 中写 ,  写法
          /*
        @interfance
  类名 () {
       
  实例变量
        }
          
  私有方法声明
        @end
        */
       
       
  //Protocol:  协议
       
  // 遵守协议用 <>,  写在 @interfance,  父类名的后面
        Boy *boy = [[Boy alloc] init];
        [boy buyFood];
        [boy buyiPhone];
       
       
  //delegate:  代理
       
       
  // 步骤
       
  // 找代理的类
       
  //(1) 制定协议
       
  //(2) 添加实例变量
       
  //(3) 为实例变量写 setter 方法
       
       
  // 想要成为代理的类
       
  //(1) 遵守协议
        //(2)实现协议中必须实现的方法

你可能感兴趣的:(objective-c,编程,学习,ios开发,extension)