zoukankan      html  css  js  c++  java
  • <02>

    SingletonTool.h 文件
     
    #import <Foundation/Foundation.h>
    //遵守NSCopying,NSMutableCopying协议
    @interface SingletonTool : NSObject<NSCopying,NSMutableCopying>

    @property (nonatomic,copy) NSString *name;
    @property (nonatomic,assign) int age;
    @property (nonatomic,assign) BOOL isBoy;
    @property (nonatomic,strong) NSArray *inforarry;

    //实例化一个类方法、返回一个单例对象
    + (instancetype)shareTools;

    @end
     
     
    SingletonTool.m 文件
     #import "SingletonTool.h"
    //提供一个static修饰的全局变量、强引用已经实例化的对象
    static SingletonTool *singTool;

    @implementation SingletonTool
    //实例化一个类方法、返回一个单例对象
    +(instancetype)shareTools{
       
        //注意:这里建议使用self,而不是直接使用类名Tools(考虑继承)
        return [[self alloc] 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 = [super allocWithZone:zone];
               
            }
        }

        return singTool;
       
    }
    //copy 返回一个不可变对象
    -(id)copyWithZone:(NSZone *)zone{
       
        //若原对象是不可变对象,那么返回原对象,并将其引用计数加1;
        //return [[self class] allocWithZone:zone];
        //若原对象是可变对象,那么创建一个新的不可变对象,并初始化为原对象的值,新对象的引用计数为 1。
        return singTool;
       
    }
    //mutableCopy 创建一个新的可变对象,并初始化为原对象的值,新对象的引用计数为 1;
    -(id)mutableCopyWithZone:(NSZone *)zone{
       
        return singTool;
    }
    @end
     
     
     
    //存入相应属性
        SingletonTool *sing = [SingletonTool shareTools];
        sing.name = @"Jace";
        sing.age = 15;
        sing.isBoy = YES;
        sing.inforarry = [NSArray arrayWithObjects:@"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 = [SingletonTool shareTools];
        NSLog(@"3-> sing.name = %@, sing.age = %d, sing.isBoy = %d,sing.inforarry = %@", sing.name,sing.age,sing.isBoy, sing.inforarry);
       
       
     
     
     
  • 相关阅读:
    Plugs介绍(翻译) .net/C#开源操作系统学习系列六
    Cosmos的里程碑2(Mile Stone 2)之浅尝PCI总线、设备编程.net/C#开源操作系统学习系列九
    [翻译] WindowsPhoneGameBoy模拟器开发二Rom文件分析
    Cosmos开篇、本系列目录.net/C#开源操作系统学习系列一
    Cosmos的汇编级调试器(翻译) .net/C#开源操作系统学习系列七
    数据库牛人榜(随时更新)
    redis大key删除
    Linux LVM硬盘管理及LVM扩容
    Linux学习之CentOS(十一)CentOS6.4下Samba服务器的安装与配置
    Linux学习之CentOS(三十)SELinux安全系统基础
  • 原文地址:https://www.cnblogs.com/iQingYang/p/6702948.html
Copyright © 2011-2022 走看看