zoukankan      html  css  js  c++  java
  • iOS单例模式(Singleton)

    单例模式的意思就是只有一个实例。单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。这个类称为单例类。

    1.单例模式的要点:

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

    2.单例模式的优点:

      1.实例控制:Singleton 会阻止其他对象实例化其自己的 Singleton 对象的副本,从而确保所有对象都访问唯一实例。
      2.灵活性:因为类控制了实例化过程,所以类可以更加灵活修改实例化过程
     
    IOS中的单例模式
      在objective-c中要实现一个单例类,至少需要做以下四个步骤:
      1、为单例对象实现一个静态实例,并初始化,然后设置成nil,
      2、实现一个实例构造方法检查上面声明的静态实例是否为nil,如果是则新建并返回一个本类的实例,
      3、重写allocWithZone方法,用来保证其他人直接使用alloc和init试图获得一个新实力的时候不产生一个新实例,
      4、适当实现allocWitheZone,copyWithZone,release和autorelease。
    下面以SurveyRunTimeData为例子:
     1 static SurveyRunTimeData *sharedObj = nil; //第一步:静态实例,并初始化。
     2 @implementation SurveyRunTimeData
     3 + (SurveyRunTimeData*) sharedInstance  //第二步:实例构造检查静态实例是否为nil
     4 {
     5     @synchronized (self)
     6     {
     7         if (sharedObj == nil)
     8         {
     9             [[self alloc] init];
    10         }
    11     }
    12     return sharedObj;
    13 }
    14 
    15 + (id) allocWithZone:(NSZone *)zone //第三步:重写allocWithZone方法
    16 {
    17     @synchronized (self) {
    18         if (sharedObj == nil) {
    19             sharedObj = [super allocWithZone:zone];
    20             return sharedObj;
    21         }
    22     }
    23     return nil;
    24 }
    25 
    26 - (id) copyWithZone:(NSZone *)zone //第四步
    27 {
    28     return self;
    29 }
    30 
    31 - (id) retain
    32 {
    33     return self;
    34 }
    35 
    36 - (unsigned) retainCount
    37 {
    38     return UINT_MAX;
    39 }
    40 
    41 - (oneway void) release
    42 {
    43     
    44 }
    45 
    46 - (id) autorelease
    47 {
    48     return self;
    49 }
    50 
    51 - (id)init
    52 {
    53     @synchronized(self) {
    54         [super init];//往往放一些要初始化的变量.
    55         return self;
    56     }
    57 }
    58 
    59 @end
  • 相关阅读:
    MySQL补充
    不同操作系统下虚拟环境的搭建
    Python导学基础(二)变量与基础数据类型
    Python导学基础(一)介绍
    KM 算法
    题解-CF1065E Side Transmutations
    题解-CF1140E Palindrome-less Arrays
    题解-CF677D Vanya and Treasure
    splay文艺平衡树
    splay区间操作(bzoj1500)
  • 原文地址:https://www.cnblogs.com/luzhan/p/3192789.html
Copyright © 2011-2022 走看看