• Objective-C单例


      单例在Objective-C中得到了很多的应用,什么时候需要使用单例呢?

      在程序运行过程中需要使用一个对象,这个对象中包含特定的功能和属性,而且这个对象是静态的,而且整个程序只需要拥有一个该对象例如:

      1.控制程序执行的命令器(我也不知道是什么)

      2.管理数据库

      3.音效控制

      4.文件处理

      .........

    1.单例模式的要点:

      显然单例模式的要点有三个;一是某个类只能有一个实例;二是它必须自行创建这个实例;三是它必须自行向整个系统提供这个实例。

    2.单例模式的优点:

      1.实例控制:Singleton 会阻止其他对象实例化其自己的 Singleton 对象的副本,从而确保所有对象都访问唯一实例。
      2.灵活性:因为类控制了实例化过程,所以类可以更加灵活修改实例化过程
     
    IOS中的单例模式
      在objective-c中要实现一个单例类,至少需要做以下四个步骤:
      1、为单例对象实现一个静态实例,并初始化,然后设置成nil,
      2、实现一个实例构造方法检查上面声明的静态实例是否为nil,如果是则新建并返回一个本类的实例,
      3、重写allocWithZone方法,用来保证其他人直接使用alloc和init试图获得一个新实力的时候不产生一个新实例,
      4、适当实现allocWitheZone,copyWithZone,release和autorelease。
     
    //1,定义一个静态的全局的变量  
    static Settings *sharedSettings = nil;  
      
    //2,创建一个类方法,用来返回该类实例  
    + (Settings *)sharedInstance {  
        @synchronized(self){  
            if(sharedSettings  ==  nil){  
                sharedSettings = [[self alloc] init];  
                  
              //做一些初始化操作  
            }  
        }  
        return  sharedSettings;  
    }  
      
    //3,重写allocWithZone方法,用来保证其他人直接使用alloc和init试图获得一个新实力的时候不产生一个新实例,  
      
    + (id)allocWithZone:(NSZone *)zone {  
        @synchronized(self) {  
            if (sharedSettings == nil) {  
                sharedSettings = [super allocWithZone:zone];  
            }  
        }  
        return sharedSettings;  
    }  
      
    //4、适当实现allocWitheZone,copyWithZone,release和autorelease  
    + (id)copyWithZone:(NSZone *)zone {  
        return self;  
    }  
      
      
    - (id)retain {  
        return self;  
    }  
      
      
    - (unsigned)retainCount {  
        return UINT_MAX;  
    }  
      
      
    - (oneway void)release {  
    }  
      
      
    - (id)autorelease {  
        return self;  
    }  
    

      

  • 相关阅读:
    iphone精简教程
    自己搭建云盘 – 简单的PHP网盘程序
    内存泄漏(I)
    App 基本图片配置(I)
    Git 工作环境配置
    MVC(I)
    ReactNative APP基本框架搭建 基于 React Navigation
    UI绘制原理及卡顿 掉帧原因
    ES6中Json、String、Map、Object之间的转换
    Invariant Violation: requireNativeComponent: "RNCWKWebView" was not found in the UIManager.
  • 原文地址:https://www.cnblogs.com/azxfire/p/3770323.html
Copyright © 2020-2023  润新知