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);
       
       
     
     
     
  • 相关阅读:
    token_get_all()函数
    sql_autoload_register()函数
    微信支付,使用证书时出现58错误
    $GLOBALS['HTTP_RAW_POST_DATA']与$_POST的区别
    mysql锁机制(转载)
    文件锁使用
    单行代码实现xml转换成数组
    Eclipse 安装 SVN 插件的两种方法
    python nltk 安装及配置说明
    HanLP自然语言处理包介绍
  • 原文地址:https://www.cnblogs.com/iQingYang/p/6702948.html
Copyright © 2011-2022 走看看