美文网首页
第六节:单例

第六节:单例

作者: 清杨程 | 来源:发表于2018-09-17 15:41 被阅读6次

单例模式,就是我们定义的⼀个类,这个类只创建⼀次对象,也只创建⼀个对象。这个类的对象,供整个程序使⽤。      

单例模式的三个必要条件:     

1、单例类只能有⼀个对象

2、这个变量必须是⾃⼰⾃⾏创建的。

3、这个变量必须给整个程序使⽤

SingletonTool.h 文件

#import<Foundation/Foundation.h>

//遵守NSCopying,NSMutableCopying协议

@interfaceSingletonTool :NSObject<NSCopying,NSMutableCopying>

@property(nonatomic,copy)NSString*name;

@property(nonatomic,assign)intage;

@property(nonatomic,assign)BOOLisBoy;

@property(nonatomic,strong)NSArray*inforarry;

//实例化一个类方法、返回一个单例对象

+ (instancetype)shareTools;

@end


SingletonTool.m 文件

#import"SingletonTool.h"

//提供一个static修饰的全局变量、强引用已经实例化的对象

staticSingletonTool*singTool;

@implementationSingletonTool

//实例化一个类方法、返回一个单例对象

+(instancetype)shareTools{

   //注意:这里建议使用self,而不是直接使用类名Tools(考虑继承)

   return[[selfalloc]init];

}

// 避免alloc产生新对象,所以需要重写allocWithZone方法

+(instancetype)allocWithZone:(struct_NSZone*)zone{

 /*

1、使用GCD

    static dispatch_once_t onceToken;

    dispatch_once(&onceToken, ^{

        singTool = [super allocWithZone:zone];

    });

*/

   //1、使用加锁的方式、保证只分配一次存储空间

   @synchronized(self) {

       if(singTool==nil) {

           singTool= [superallocWithZone:zone];

        }

    }

   returnsingTool;

}

//copy返回一个不可变对象

-(id)copyWithZone:(NSZone*)zone{

   //若原对象是不可变对象,那么返回原对象,并将其引用计数加1;

   //return [[self class] allocWithZone:zone];

   //若原对象是可变对象,那么创建一个新的不可变对象,并初始化为原对象的值,新对象的引用计数为1。

   returnsingTool;

}

//mutableCopy创建一个新的可变对象,并初始化为原对象的值,新对象的引用计数为1;

-(id)mutableCopyWithZone:(NSZone*)zone{

   returnsingTool;

}

@end


//存入相应属性

   SingletonTool*sing = [SingletonToolshareTools];

    sing.name=@"Jace";

    sing.age=15;

    sing.isBoy=YES;

    sing.inforarry= [NSArrayarrayWithObjects:@"123",@"abc",@"QWE",nil];

   NSLog(@"1-> sing.name= %@, sing.age = %d, sing.isBoy = %d,sing.inforarry = %@", sing.name,sing.age,sing.isBoy, sing.inforarry);

//取出相应值

    SingletonTool*sing = [SingletonToolshareTools];

   NSLog(@"3-> sing.name= %@, sing.age = %d, sing.isBoy = %d,sing.inforarry = %@", sing.name,sing.age,sing.isBoy, sing.inforarry);

相关文章

  • 第六节:单例

    单例模式,就是我们定义的⼀个类,这个类只创建⼀次对象,也只创建⼀个对象。这个类的对象,供整个程序使⽤。 单例模式的...

  • Android设计模式总结

    单例模式:饿汉单例模式://饿汉单例模式 懒汉单例模式: Double CheckLock(DCL)实现单例 Bu...

  • IOS单例模式的底层原理

    单例介绍 本文源码下载地址 1.什么是单例 说到单例首先要提到单例模式,因为单例模式是单例存在的目的 单例模式是一...

  • 【设计模式】单例模式

    单例模式 常用单例模式: 懒汉单例模式: 静态内部类单例模式: Android Application 中使用单例模式:

  • 2020-11-02-Spring单例 vs. 单例模式

    Spring 单例不是 Java 单例。本文讨论 Spring 的单例与单例模式的区别。 前言 单例是 Sprin...

  • IOS学习笔记之单例

    单例介绍 1.什么是单例 说到单例首先要提到单例模式,因为单例模式是单例存在的目的 单例模式是一种常用的软件设计模...

  • OC - 单例模式

    导读: 一、什么是单例模式 二、单例的作用 三、常见的单例类 四、自定义单例类的方法 一、什么是单例模式 单例模式...

  • 单例

    单例 单例宏

  • 单例模式

    特点 单例类只有1个实例对象 该单例对象必须由单例类自行创建 单例类对外提供一个访问该单例的全局访问点 结构 单例...

  • 关于java单例模式,这篇已经讲得很清楚了,建议收藏!

    概念 java中单例模式是一种常见的设计模式,单例模式分三种:懒汉式单例、饿汉式单例、登记式单例三种。 特点 单例...

网友评论

      本文标题:第六节:单例

      本文链接:https://www.haomeiwen.com/subject/yizlnftx.html