zoukankan      html  css  js  c++  java
  • IOS之单例(singlon)开发模式

    IOS单例模式(Singleton)

     

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

    1.单例模式的要点:

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

    2.单例模式的优点:

      1.实例控制:Singleton 会阻止其他对象实例化其自己的 Singleton 对象的副本,从而确保所有对象都访问唯一实例。

      2.灵活性:因为类控制了实例化过程,所以类可以更加灵活修改实例化过程

     

    IOS中的单例模式

      在objective-c中要实现一个单例类,至少需要做以下四个步骤:

      1、为单例对象实现一个静态实例,并初始化,然后设置成nil,

      2、实现一个实例构造方法检查上面声明的静态实例是否为nil,如果是则新建并返回一个本类的实例,

      3、重写allocWithZone方法,用来保证其他人直接使用alloc和init试图获得一个新实力的时候不产生一个新实例,

      4、适当实现allocWitheZone,copyWithZone,release和autorelease。

    下面是Util(工具类)的例子:

    Util.h:

    #import <Foundation/Foundation.h>

     

    @interface Util : NSObject

     

    +(Util *)getInstance;

     

    -(void)setUsername;

     

    -(NSString *)getUserName;

     

    @end

    在Util.m里面的实现:

      

    #import "Util.h"

     

    @implementation Util

     

    static Util *util = nil;

     

    +(Util *)getInstance{

     

        @synchronized(self) {

            

            if(util == nil){

             

                util = [[Util alloc]init];

            }

        }

        return util;

    }

     

     

    -(NSString *)getUserName{

     

        NSString *name  = [[NSUserDefaults standardUserDefaults] valueForKey:@"username"];

        

        return name;

    }

     

     

    -(void)setUsername{

     

        NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];

        NSString *name = @"朱峰";

        [defaults setObject:name forKey:@"username"];

        [defaults synchronize];

    }

     

    @end

    最后在Appdelegate.m里面调用的方法:

     

    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

        // Override point for customization after application launch.

        

        [[Util getInstance]setUsername];

        NSString *currentName = [[Util getInstance]getUserName];

        NSLog(@"currentname:%@",currentName);

        return YES;

    }

    这就是单例的完整的调用了,在我们的项目中运用的非常多,我们要多多的运用!!!!

  • 相关阅读:
    求一个字符串中连续出现次数最多的子串
    LintCode: Longest Common Substring
    LintCode: O(1) Check Power of 2
    LintCode: Fizz Buzz
    LintCode: 3 Sum
    LintCode: Two Sum
    LintCode: Sort Colors
    LintCode: Median of two Sorted Arrays
    LintCode: Search A 2d Matrix
    Lintcode: Sqrt(X)
  • 原文地址:https://www.cnblogs.com/zhufeng1994/p/5150791.html
Copyright © 2011-2022 走看看