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

  • 相关阅读:
    Linux目录操作
    应用性能监控:SkyWalking
    Dorkish:一款针对OSINT和网络侦查任务的Chrome扩展
    CodeForces刷题C语言:Next Test、Spit Problem、Traffic Lights、Reconnaissance、Borze
    技术分享 | 想做App测试就一定要了解的App结构
    CAN总线负载及CANoe查看总线负载率
    互联网上市企业的“期中考”:有人躺平式过冬,有人多元化深耕
    Xilinx Kintex7中端FPGA解码MIPI视频,基于MIPI CSI-2 RX Subsystem架构实现,提供工程源码和技术支持
    Java --- Spring6对IoC的实现
    Python:每日一题之最少砝码
  • 原文地址:https://blog.csdn.net/qq_34491373/article/details/126420418