• iOS学习笔记---oc语言第七天


    类的扩展

    NSDate是Cocoa中用于处理日期和时间的基础类,封装了某一给定的时刻,具体的日期 时间和时区

    使用+date方法获取当前日期和时间

    1 NSDate *date = [NSDate date];//获取当前时间
    2     NSLog(@"%@",date);//无论你是哪个时区的时间,打印的总是o时区的时间
    3     NSDate *date2 = [NSDate dateWithTimeIntervalSinceNow:60*60*8];//从现在开始之后的时间
    4     NSLog(@"%@",date2);
    5     NSTimeInterval date3 = [date timeIntervalSince1970];//获取时间间隔  从1970年到现在的时间间隔
    6     NSLog(@"%f",date3);

    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];

     1     NSDateFormatter *format = [[NSDateFormatter alloc] init];
     2     [format setDateFormat:@"YYYY-MM-dd  HH:mm:ss"];
     3     //YYYY代表4位的年
     4     //MM代表两位的月
     5     //dd代表两位的日
     6     //HH代表24进制小时
     7     //mm代表两位的分钟
     8     //ss代表两位的秒
     9     //NSDateFormatter功能是NSString 与 NSDate 互转
    10     //1.NSDate转换为NSString
    11     NSString *datestr = [format stringFromDate:date];
    12     NSLog(@"%@",datestr);
    13     
    14     NSDate *newdate = [format dateFromString:@"2014-07-02 11:54:03"];
    15     NSLog(@"%@",newdate);

     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与子类的区别

     练习:

        使⽤用Category为NSDate类添加⼀个类⽅方法

        (dateWithDateString:),实现将下述字符串转换为NSDate对象。 将@“20140402142850”转换为NSDate。

        NSLog(@"%@",[NSDate dateWithString:@"20140402142850"]);

    NSDate+DateWithString.h中代码
    #import <Foundation/Foundation.h>
    
    @interface NSDate (DateWithString)
    + (NSDate *)dateWithString:(NSString *)str;
    @end
    NSDate+DateWithString.m中代码
    #import "NSDate+DateWithString.h"
    
    @implementation NSDate (DateWithString)
    + (NSDate *)dateWithString:(NSString *)str
    {
        NSDateFormatter *format = [[NSDateFormatter alloc] init];
        [format setDateFormat:@"YYYYMMddHHmmss"];
        NSDate *date = [format dateFromString:str];
        return date;
    }
    @end
    main.m中代码
        NSLog(@"%@",[NSDate dateWithString:@"20140402142850"]);

     Extension

    主要作用是为类添加"私有"方法

    在.h中没有声明,在.m中有实现

    有时候方法比较复杂的时候,使用私有方法结合组成一个复杂方法,,外部实现只用声明复杂方法,不用理会私有方法的实现

     1 #import "Person.h"
     2 @interface Person()//这样就写成Extension,不写也可以,写出来只是为了管理,给程序看的,让其他开发者一眼能看出来那些是"私有"方法
    {
    NsInteger _age;//定义一个私有变量
    }

    3 - (void)eat;

    4 @end
     5 
     6 @implementation Person
     7 - (instancetype)initWithName:(NSString *)name sex:(NSString *)sex
     8 {
     9     self = [super init];
    10     if (self) {
    11         _name = name;
    12         _sex = sex;
    13     }
    14     [self eat];
    15     return self;
    16 }
    17 - (void)eat//只有实现,没有声明 .m文件中其他方法可以调用
    18 {
    19     NSLog(@"这是一个私有方法,只有自己的.m文件中使用eat");
    20 }
    21 @end

    Protocol 协议

    协议是一套标准(一堆方法的声明),只有.h文件

    接受协议的对象实现协议中定义的方法

    #import <Foundation/Foundation.h>
    
    @protocol MyProtocol <NSObject>//< >中定义的的这个协议也遵守了NSObject协议
    @required//默认是必须实现的  可以省略,省略代表必须实现
    - (void)method1;
    - (void)method2;
    @optional//可选择是否实现
    - (void)method3;
    @end

     遵循协议

    #import “MarryProtocol”

    @interface Boy : NSObject <MarryProtocl> ...

    @end

    @implementation Boy

    //协议中⽅法的实现

    @end

    一个结婚的协议例子

    //协议MarryProtocol.h中文件
    #import <Foundation/Foundation.h>
    
    @protocol MarryProtocol <NSObject>
    
    - (void)washcloth;
    
    - (void)cook;
    
    - (void)dohousework;
    
    - (void)makeMoney;
    
    @optional
    - (void)hitDouDou;
    
    @end
    //Girl.h中代码
    #import <Foundation/Foundation.h>
    #import "MarryProtocol.h"
    
    @interface Girl : NSObject
    {
        NSInteger _age;//年龄
        id <MarryProtocol> _husband;
        
    }
    - (instancetype)initWithAge:(NSInteger)age;
    //设置年龄
    - (void)setAge:(NSInteger)age;
    //获得年龄
    - (NSInteger)age;
    
    - (void)work;
    
    - (void)setHusband:(id<MarryProtocol>)husband;
    
    - (void)hungry;
    - (void)dirty;
    @end
    //Girl.m中代码
    #import "Girl.h"
    
    @implementation Girl
    - (instancetype)initWithAge:(NSInteger)age
    {
        self = [super init];
        if (self) {
            _age = age;
        }
        return self;
    }
    - (void)hungry
    {
        [_husband cook];
    }
    - (void)setAge:(NSInteger)age
    {
        _age = age;
    }
    
    - (NSInteger)age
    {
        return _age;
    }
    
    - (void)work
    {
        NSLog(@"接拍电影,广告,电视剧");
    }
    
    - (void)setHusband:(id<MarryProtocol>)husband
    {
        _husband = husband;
    }
    - (void)dirty
    {
        [_husband washcloth];
    }
    @end
    //Boy.h中代码
    #import <Foundation/Foundation.h>
    #import "MarryProtocol.h"
    @interface Boy : NSObject <MarryProtocol>
    - (void)work;
    @end
    //Boy.m中代码
    #import "Boy.h"
    
    @implementation Boy
    - (void)work
    {
        NSLog(@"我是一个牛逼替身");
    }
    
    - (void)washcloth
    {
        NSLog(@"洗衣服");
    }
    
    - (void)cook
    {
        NSLog(@"做饭");
    }
    
    - (void)dohousework
    {
        NSLog(@"做家务");
    }
    
    - (void)makeMoney
    {
        NSLog(@"赚钱");
    }
    - (void)hitDouDou
    {
        NSLog(@"打豆豆");
    }
    @end
    //main.m中代码
    #import <Foundation/Foundation.h>
    
    #import "Girl.h"
    #import "Boy.h"
    
    int main(int argc, const char * argv[])
    {
    
    
        Girl *liuyifei = [[Girl alloc] initWithAge:27];
        [liuyifei work];
        //数年之后
        Boy *wangwu = [[Boy alloc] init];
        [wangwu work];
        
        //慢慢熟悉
        //...
        //走到一起
        //丈母娘
        //不同意
        
        [liuyifei setHusband:wangwu];
        [liuyifei hungry];
        [liuyifei dirty];
        
        //n年之后,wangwu富有了
        [liuyifei setHusband:nil];
    
    
        
        
        
        return 0;
    }
  • 相关阅读:
    文字对战小游戏~~~
    面向对象--类库、委托、is和as运算符、泛型集合
    推箱子
    算法训练 K好数
    用memset设置无穷大无穷小
    算法训练 关联矩阵
    未名湖边的烦恼
    数字三角形
    算法训练 最大最小公倍数
    算法训练 区间k大数查询
  • 原文地址:https://www.cnblogs.com/limicheng/p/3819551.html
Copyright © 2020-2023  润新知