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];//匿名对象:没有对象指针指向的对象

时间: 2024-10-03 22:56:25

OC--单例--NSDate--归档--json--plist--协议的相关文章

oc单例

转自:http://www.2cto.com/kf/201412/362291.html 单例模式在iOS开发中可能算是最常用的模式之一了,但是由于oc本身的语言特性,想要写一个正确的单例模式相对来说比较麻烦,这里我就抛砖引玉来聊一聊iOS中单例模式的设计思路.关于单例模式更多的介绍请参考这篇文章. 单例顾名思义就是说一个类的实例只能有一个,在java.C++这类语言中,可以通过将构造函数私有化来避免对象的重复创建,但是objective-c却不能够这样做,我们需要通过其他机制来达到这个目的.一

OC单例详解

单例(singleton) 实现单例模式有三个条件: 类的构造方法是私有的 类提供一个类方法用于产生对象 类中有一个私有的自己对象 针对于这三个条件,OC中都是可以做到的 类的构造方法是私有的我们只需要重写allocWithZone方法,让初始化操作只执行一次 类提供一个类方法产生对象这个可以直接定义一个类方法 类中有一个私有的自己对象我们可以在.m文件中定义一个属性即可 可以保证在程序运行过程,一个类只有一个实例 应用场景 某个类经常被使用(节约系统资源) 定义工具类 共享数据 注意点 不要继

OC -- 单例设计模式

#import <Foundation/Foundation.h> @interface Person : NSObject + (instancetype)sharePerson; @end @implementation Person + (instancetype)sharePerson{ Person *p = [[Person alloc] init]; return p; } static Person *_instance; + (instancetype)allocWithZo

OC 单例

1利用GCD方式实现单例(ARC) #import "People.h" @implementation People static id _instace; +(id)allocWithZone:(struct _NSZone *)zone{ //为防止用alloc创建对象 static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ _instace=[super allocWithZone:zone]; })

OC单例快速实现

首先新建一个头文件,定义如下宏: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81

OC单例概念以及样例

单例: 一个类中在整个程序只会创建一个对象,这个单例对象的数据是整个程序所有的文件所有的函数可以共享.和全局变量类似 NSFileManagerUIApplication //函数开头 defaultXXXX或者 sharedXXX 非标准单例 + (MyPlane *)defaultPlane{     static MyPlane * plane = nil;     @synchronized(self){         if (!plane) {             plane =

ios oc单例宏定义

#undef AS_SINGLETON #define AS_SINGLETON( __class ) \ - (__class *)sharedInstance; \ + (__class *)sharedInstance; #undef DEF_SINGLETON #define DEF_SINGLETON( __class ) \ - (__class *)sharedInstance \ { \ return [__class sharedInstance]; \ } \ + (__cl

OC 单例实现

2. 在.h 文件遵循 <NSCopying,NSMutabalecopying> 原文地址:https://www.cnblogs.com/qingzZ/p/9258902.html

OC &amp; Swift 单例

1. OC 单例 + (NetworkTool *)sharedNetworkTool { static id instace; static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ instace = [[self alloc] init]; }); return instace; } 2. Swift 单例 private static let instance = NetworkTool() class func sh