OC--单例--NSDate--归档--json--plist--协议

-------单例--------

定义:一个类只允许创建一个对象,在任何地方调用对象方法或属性的时候,只能通过这个对象。注意:一般在单例类里面只创建有限的类方法。

作用:1.一个类只能有一个对象的时候,并且从一个大家都熟知的访问点访问它  2.保存值

 

//1.将本类的对象设置静态的,这样就能保证对象的唯一性。

//manage是全局的

static  SetUpManage *manage  = nil;

+(SetUpManage *)sharedManage{

    @synchronized(self){//2同步设置,保证线程安全

        //3.若果对象为空,那就创建一个对象

        if (manage == nil) {

            manage = [[SetUpManage alloc]init];

        }

    }

    //4.将创建好的对象返回

    return manage;

}

 //严谨的说还要重写allocWithZone:方法 当我们调用alloc的时候,内部其实调用的是allocWithZone:方法

+(id)allocWithZone:(NSZone *)zone{

    if (manage == nil) {

        manage = [super allocWithZone:zone];

    }

    

    return manage;

}

//释放单例的对象

-(void)freeManage{

    if (manage != nil) {

        manage = nil;

    }

}

 ----------NSDate-----------

  //获取当前系统时间 直接输出的时格林尼治时间(GMT)

        NSDate *date = [NSDate date];        

        //输出本地时间

        //(NSTimeInterval)是以秒为单位

        NSDate *nowDate = [date dateByAddingTimeInterval:60*60*8];        

        NSLog(@"%@,%@",date,nowDate);        

        //将来的某个时刻 4001-01-01 00:00:00

        NSDate *future = [NSDate distantFuture];

        //过去的某个时刻 0001-12-30 00:00:00

        NSDate *past = [NSDate distantPast];        

        NSLog(@"%@,%@",future,past);        

        //时间比较

        NSDate *date1 = [NSDate date];        

        if ([date isEqualToDate:date1]) {            NSLog(@"时间一样");        }else{            NSLog(@"时间不一样");        }

 

      ----  NSDateFormatter:时间转换器,作用:以规定的某种格式为标准,将字符串与NSDate类型数据之间进行转化

 

        //创建一个NSDateFormatter类型的对象

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

        //@"1985-09-02 23:12:12"

        //确定标准

        //HH表示24小时制  hh表示12小时制

        formatter.dateFormat = @"yyyy-MM-dd HH:mm:ss";        

        NSDate *date = [NSDate date];

        //将日期转化为字符串

        NSString *string = [formatter stringFromDate:date];                

        //字符串转为日期

        NSDate *newDate = [formatter dateFromString:string];    

----------归档------------

         归档:一种存储数据的方式  ,注意:要想实现归档,必须遵守NSCoding协议

             分两种:1.对系统的类进行的归档  2.对自定义的类进行的归档

----------json解析-----------

NSString *string = [NSString stringWithContentsOfFile:@"/Users/Desktop/共享资料/jsonUserList.txt" encoding:NSUTF8StringEncoding error:nil];    

    NSLog(@"%@",string);    

    //利用oc自带的json解析器解析

     第一个参数:将要解析的数据

     第二个参数:(NSJSONReadingOptions)

     NSJSONReadingMutableContainers = (1UL << 0),  顶层是字典或数组

     NSJSONReadingMutableLeaves = (1UL << 1),  顶层是字符串

     NSJSONReadingAllowFragments = (1UL << 2) 顶层不能是字典或数组

    NSData *data = [string dataUsingEncoding:NSUTF8StringEncoding];

    //解析

    NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];    

    NSLog(@"dic%@",dic[@"count"]);

------------plist-------------

plist:存储的是NSDictionary,NSArray,NSNumber,BOOL,NSString内容。

         大多数情况下最外层是字典

         作用:存储属性,属性级的存储方式。

 

//1.找到plist文件,找路径

        NSString *path = @"/Users/qianfeng/Desktop/myInfo.plist";

        //2.创建一个空的字典

        NSMutableDictionary *dictionary  = [[NSMutableDictionary alloc]init];

        //3.添加数据

        [dictionary setObject:[NSNumber numberWithInt:4] forKey:@"age"];

        [dictionary setObject:[NSNumber numberWithChar:‘c‘] forKey:@"symbol"];

        [dictionary setObject:@"lilei" forKey:@"name"];

        [dictionary setObject:@[@"chinese",@"english"] forKey:@"Score"];        

        //4.将数据写入plist文件

        //第二个参数:如果写到一半,发生了别的事情,不能继续,写完的部分是否保留。

        [dictionary writeToFile:path atomically:YES];

   //读取

        dictionary = [NSDictionary dictionaryWithContentsOfFile:path];

 ------------协议----------------

1.协议的定义?

         一个方法的列表就叫协议。 特点:只有方法的声明,没有实现。实现放在:那个类引用了这个协议,实现就放在这个类的实现当中

         2.格式:@protocol 协议名字

         方法的声明列表

         @end         

         3.协议的使用:

         3.1 创建协议  2.引入协议  3.引用协议 注意:代表你要遵守这个协议 4.写协议里面方法的实现         

         4.协议的分类:非正式协议和正式协议

         4.1 非正式协议:类的声明部分,没有成员变量的声明,只有方法的声明

              正式协议:给协议起了一个正式的名称。

         区别:非正式协议:只能被自己和子类引用,正式协议:只要这个类引用了我,就可以使用我         

         5.为什么使用协议? (使用的是工程:理解协议)

         提供了一个统一的接口。当多个类拥有同一个功能的时候,咱们可以将这个功能提取出来,形成一个方法的列表。         

         6.正式协议内部方法的分类

         6.1 由@optional 修饰的方法  被引用后,这个类可以写方法的实现,也可以不写方法的实现

         6.2 由@required 修饰的方法  被引用后,这个类必须写方法的实现 (默认是required类型的         

         7.协议与继承

                继承:                       协议

         相同点:都可以提供统一的接口

         不同点:给现有类创建父类           不用单独创建一个类

                里面可以有成员变量的声明    只能有方法声明

                耦合性高                     耦合性相对来说比继承低

                类与类之间要有兄弟关系       使用协议的可以是任意类,前提:只 

                                              要遵守了此协议即可

         8.其他功能

         一个协议可以被多个类或协议引用

         一个类或协议可以同时引用多个协议

         协议与类的声明可以同时放在一个。文件中

------------匿名对象--------------

        Dog *dog1 = [[Dog alloc]init];//实名对象:有对象指针指向这个对象

        [[Dog alloc]init];//匿名对象:没有对象指针指向的对象

 

 

 

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。