OC 7 Category分组 Extension延展 protocol协议 NSDate日期类

1.继承是可以完成对类的扩充的,不仅能够添加方法也能添加实例变量;缺点:如果工程中有很多需要扩展类的使用,此时要用子类完成替换,工作量非常大时,还容易出错

2.使用Category  分类或者叫类目
主要作用:是为没有源代码的类添加方法,不能添加实例变量
添加分类的步骤:
(1)新建文件  comd  + n
(2)选择 object - c file模块
(3)file栏根据扩展功能,写入文件名
(4)中间栏选择Category
(5)class选项写入对那个类的扩充,就写入那个类的类名
(6)next之后会自动生成一对  类名 + 扩展名.h   和   类名 +扩展名.m文件
(7)在.h文件中写入方法的声明
(8)在.m文件中写入方法的实现

3.使用Category添加的方法,是直接作用在当前的类上,可以使用当前类或者当前类创建的对象直接调用方法
Person *p1 = [[Person alloc]init];
    [
Person study];
    调用分类中的方法
    [p1 study];

4.如果分类中定义和原始类中一样的方法,此时优先选择执行分类中的方法;方法调用的优先级:分类 —》原来的类—》父类,若包含有多个分类,则最后参与编译的分类优先

//()代表是某个类的分类
//()中是内容的分类名
@interface Person (Study)
{
//    NSString *_color;error!!!!!实例变量是不能定义在分类中
}

//分类不仅可以添加类方法也可以添加对象方法
5.Extension延展  主要用来管理一个类的私有方法
给一个类添加延展的步骤
(1)comd  +n
(2)选择object - c file 模板
(3)第一个file栏写入延展名 prviate
(4)中间栏   选择   Extension
(5)class对那个类延展就写哪个类的类名
(6)此时只生成.h文件
(7)然后回到类的.m文件中写延展的实现,前提引入头文件
(8)注意:延展中可以添加实例变量,此时变量也是私有的
(9)延展针对的是能看到源文件的类
(10)延展可以不需要创建.h文件,直接写到类的.m中;建议以后写延展就使用这种方法;延展方便我们管理一个类的私有方法和实例变量

6.延展和分类的区别
(1)延展中可以添加实例变量,分类中不可以
(2)延展中的方法和实例变量都是私有的,外界不能访问,分类中的方法外界可以访问
(3)延展针对的是已知类(因为它的实现只能在这个类的.m文件中写),分类可以为不知道源文件的类添加方法
(4)延展中的内容子类不能继承,而分类中的内容子类可以直接使用

7.代理设计的由来:自己不想干,找别人干
代理设计模式的步骤:
(1)制定代理
(2)找代理
(3)遵循协议,成为代理
(4)执行协议中的方法


8.制定协议的步骤:
(1)comd + n
(2)文件名(类名 + delegate )eg:PersonDelegate
(3)中间栏    选择Protocol
(4)class哪个类制定的协议就写哪个类
(5)只生成.h文件
(6)谁成为代理就去谁的.m文件中写协议中的方法实现

9. //此时这个实例变量必须遵循协议<协议名称>
   
//遵循协议符号<协议名称>
    id<GirlDelegate>  _boyFriend;

@required
//required修饰协议内容必须实现的

@optional
// 可选择实现的

一个类要想成为代理必须遵循协议,遵循协议的位置写在父类的后面,使用一对尖括号<>即可
@interface Boy : NSObject <GirlDelegate>


                                     日期类
1.NSDate是一个日期类,继承自NSobject ,代表的是一个时间点
创建一个当前日期

 NSDate *date =[NSDate date];
    NSLog(@"%@",date);显示的是格林尼治时间,年月日 时分秒  +时区
typedef double NSTimeInterval; NSTimeIntervaldouble类型的

2. NSDate *date1 =[NSDate dateWithTimeIntervalSinceNow:60];
    NSLog(@"%@",date1);

3.昨天的现在时刻
 NSDate *yesterday = [NSDate dateWithTimeIntervalSinceNow:-24*60*60];
    NSLog(@"%@",yesterday);

4.明年的今天就是你的忌日

 NSDate  *nextYear = [NSDate dateWithTimeIntervalSinceNow:365*24*60*60];
   
NSLog(@"%@",nextYear);

5.计算给定Date对象和当前时间的时间间隔
NSTimeInterval interval = [date1 timeIntervalSinceNow];
    NSLog(@"%.2lf",interval);


6.计算当前时间和明年现在时刻的时间
 interval = [date timeIntervalSinceDate:nextYear];
    NSLog(@"%.2lf",interval);

7. //时间戳:从1970.1.1到当前时间的时间间隔,就叫时间戳
    interval = [date
timeIntervalSince1970];
    NSLog(@"%.2f",interval);

8.获取北京时间
在0时区的基础上加上8个小时,就到了东八区,也就是北京时间
 NSDate *date5 = [date dateByAddingTimeInterval:8*60*60];
    NSLog(@"%@",date5);

//计算一个当前时间和一个固定时间的差值,如果差值在60秒以内,则输出刚刚,如果在60秒到3600之间,输出XX分钟之前,如果在360024*3600之内,输出XX小时之前,如果是24*3600之外,则显示出固定时间日期
   
   
//创建固定时间对象
   
NSDate *dated6 = [NSDate dateWithTimeIntervalSinceNow:-36*3600];
   
//计算固定时间和当前时间的间隔
   
NSTimeInterval interval2 = [dated6 timeIntervalSinceNow];
   
//将负数转换为正数
//    interval2 =(-interval2);
   
if (interval2 < 60) {
       
NSLog(@"刚刚");
    }
else if (interval2 < 3600){
       
NSLog(@"%.2f分钟之前",interval2/60);
    }
else if (interval2 < 24*3600){
       
NSLog(@"%.2f小时之前",interval2/3600);
    }
else{
       
NSLog(@"%@",dated6);
    }

9.NSDateFormatter 日期格式类,继承NSFormatter,主要作用是将NADa特Formatter对象转换为某种格式,然后转换成NSString

(1)创建NSDateFormatter对象
 NSDateFormatter *formatter =[[NSDateFormatter alloc]init];

(2)设定日期格式:y代表年,M代表月,d代表天,H代表小时,m代表分钟,s代表秒
 [formatter setDateFormat:@"yyyyMMdd HHmmss"];
    NSDate *date7 = [NSDate date];
(3)stringFromDate会直接加入相距0时区的时间间隔
//NSDate ——NSString
   
//stringFromDate会直接加上相聚0时区的时间间隔
   
NSString *dateString = [formatter stringFromDate:date7];
   
NSLog(@"%@",dateString);

(4)将Date的显示格式变为:“2015年09月07号,11-25-20
//Date7的显示格式变为:“20150907号,11-35-20”
   
NSDateFormatter *mm2 = [[NSDateFormatter alloc]init];
    [mm2  
setDateFormat:@"yyyyMMdd,HH-mm-ss"];
   
NSString *mm3 = [mm2 stringFromDate:date7];
    NSLog(@"%@",mm3);


(5)将字符串转换为NSDate对象
//eg:20150907 114014
   
//准备时间格式对象
   
NSDateFormatter  *formatter3 = [[NSDateFormatter alloc]init];
    [formatter3
setDateFormat:@"yyyyMMdd HHmmss"];
   
//准备字符串对象
   
NSString *dateString3 = @"20150907 114014";
   
//NSString ->NSDate
    NSDate * date8 =   [formatter3 dateFromString:dateString3];

(6)将转换回来的对象手动加上8小时,回到北京时间

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值