• iOS 关于单例常见使用方法


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

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

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

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

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

    SingletonTool.h 文件

    #import

    //遵守NSCopying,NSMutableCopying协议

    @interfaceSingletonTool :NSObject

    @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);

  • 相关阅读:
    C# Bitmap图像通过内存保存为raw图像
    修改图片尺寸的几个简单方法
    C++中invoke与function的区别
    《卡拉马佐夫兄弟》人物表
    P1529 [USACO2.4] 回家 Bessie Come Home 题解
    【Pytorch深度学习开发实践学习】B站刘二大人课程笔记整理lecture10 Basic_CNN
    猿创征文|时间序列分析算法之平稳时间序列预测算法和自回归模型(AR)详解+Python代码实现
    海外多家权威媒体热议波场TRON:为互联网去中心化奠定基础
    SpringBoot项目与Nacos配置
    打造低碳社区,践行环保理念
  • 原文地址:https://blog.csdn.net/qq_34491373/article/details/126420418