iOS之单例模式

在objective-c中要实现一个单例类,至少需要做以下四个步骤:
  1、为单例对象实现一个静态实例,并初始化,然后设置成nil,
  2、实现一个实例构造方法检查上面声明的静态实例是否为nil,如果是则新建并返回一个本类的实例,
  3、重写allocWithZone方法,用来保证其他人直接使用alloc和init试图获得一个新实力的时候不产生一个新实例,
  4、适当实现allocWitheZone,copyWithZone,release和autorelease。

static SurveyRunTimeData *sharedObj = nil; //第一步:静态实例,并初始化。
@implementation SurveyRunTimeData
+ (SurveyRunTimeData*) sharedInstance  //第二步:实例构造检查静态实例是否为nil
{
    @synchronized (self)
    {
        if (sharedObj == nil)
        {
            [[self alloc] init];
        }
    }
    return sharedObj;
}

+ (id) allocWithZone:(NSZone *)zone //第三步:重写allocWithZone方法
{
    @synchronized (self) {
        if (sharedObj == nil) {
            sharedObj = [super allocWithZone:zone];
            return sharedObj;
        }
    }
    return nil;
}

- (id) copyWithZone:(NSZone *)zone //第四步
{
    return self;
}

- (id) retain
{
    return self;
}

- (unsigned) retainCount
{
    return UINT_MAX;
}

- (oneway void) release
{
    
}

- (id) autorelease
{
    return self;
}

- (id)init
{
    @synchronized(self) {
        [super init];//往往放一些要初始化的变量.
        return self;
    }
}

@end

时间: 2024-10-12 19:09:17

iOS之单例模式的相关文章

iOS 的单例模式 dispatch_once

iOS 的单例模式 dispatch_once 有些变量只需要初始化一次(如从文件中读取配置参数,读取设备型号等等),可以使用dispatch_once来进行读取优化,保证只调用API一次,以后就只要直接访问变量即可. WeatherClient.h #import "AFHTTPClient.h" @interface WeatherClient : AFHTTPClient +(WeatherClient *)sharedClient; @end WeatherClient.m #

iOs开发 单例模式 省懒宏

#define singleton_h(name) + (instancetype)shared##name; #if __has_feature(obj_arc) #define singleton_m(name)static id _instance;+ (instancetype)shared##name{static dispatch_once_t onceToken;dispatch_once(&onceToken, ^{_instance = [[self alloc] init];

iOS下单例模式实现(objective-c arc gcd)

单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例. 这里主要介绍下在arc下,利用gcd实现单例. 第一步:声明一个静态实例 static SoundTool *_instance; 第二步:重写初始化方法 + (id)allocWithZone:(struct _NSZone *)zone 在对象初始化分配内存的时候都会调用这个方法,重写该方法时,即便用户没用通过shared方法获取实例,自己初始化依然可以保证得到的是同一个实例. 在gcd后,多线程下保证一个代码只被执

iOS中单例模式:MRC和ARC+GCD实现

iOS中单例模式的实现一般分为两种:MRC和ARC+GCD 1.MRC(非ARC) 非ARC的单例的实现方式: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 <span style="font-family: 仿宋; font-size: 15px;">#import <Foundation/Foundation.h> @inter

iOS的单例模式(singleton)

自从设计模式出现以后,关于单例模式的争执就一直存在.我们很多时候需要一个全局的东西,保证全局仅有一份即可,这个时候单例是最佳的选择,但在多线程的环境下也需要做好线程保护. 在iOS下的UIApplication和NSFileManager就是很不错的例子--我们总有时候需要用到单例模式.不过写起代码来还是值得推敲一下: 最简单的例子如下,假设我们有一个testClass的类需要实现单例: + (id)sharedInstance { static testClass *sharedInstanc

Objective-C(iOS)严格单例模式正确实现

注:本文所有权归作者所有,转载请注明出处 当希望在一个应用程序中某个类的对象只能存在一个的时候就可以考虑用单例模式来实现,单例模式在C++中比较容易实现(只需把构造函数声明为private),而在Objective-C中对象可以通过NSObject的alloc来产生,所以需要编写一些额外的代码来确保对象的唯一性,考虑到现在编写iOS APP代码几乎都是ARC方式,且GCD也已经被用烂了,故本文给出一种利用GCD技术来实现严格单例模式的ARC版本,具体代码如下所示,所有的注意点都写在了注释里面:

iOS-单例模式

何为单例模式,就是说如果在一个应用程序中,如果你想让一个类的实例使用的都是同一个,这时你就把该类设置为单例模式,iOS基础框架中有很多的单例模式类,如NSUserDefault,NSNotificationCenter等都是单例模式的设计. 单例模式的设计准则: 1.通过类方法获取单例实例, 2.必须是原子性的,保证多线程的访问安全 3.定义一个静态的指针变量,它会一直存在整个应用程序的生命周期中,一旦被初始化就会一直指向第一次创建的实例. 头文件: #import <Foundation/Fo

iOS开发单例模式 dispatch_once

什么是单例 单例模式是一种常用的软件设计模式.在它的核心结构中只包含一个被称为单例类的特殊类.通过单例模式可以保证系统中一个类只有一个实例而且该实例易于外界访问,从而方便对实例个数的控制并节约系统资源.如果希望在系统中某个类的对象只能存在一个,单例模式是最好的解决方案. iOS开发中如何使用单例 传统的单例构造方法 + (id)sharedInstance { static id sharedInstance; if(sharedInstance == nil){ sharedInstance

ios设计模式——单例模式

一.定义 单例模式:保证一个类仅有一个实例,并提供一个访问它的全局访问点. 如何保证只能创建一个实例 二.使用 类只能有一个实例,而且必须从一个为人熟知的访问点对其进行访问 这个唯一的实例只能通过子类化进行扩展,而且扩展的对象不会破坏客户端代码 三.代码 方法一 1 #import "Singleton.h" 2 3 @implementation Singleton 4 5 static Singleton * shared = nil; 6 7 + (Singleton *)sha

iOS开发-单例模式

什么是单例模式?>是开发设计模式(共23种)中的1种>它可以保证在程序运行过程,一个类只有一个实例(一个对象),而且该实例易于供外界访问,从而方便地控制了实例个数,并节约系统资源>使用场合:在整个应用程序中,共享一份资源(这份资源只需要创建初始化1次) 单例模式的基本实现1.懒汉模式 // 1.在该类中定义一个静态的全局变量,防止被外部用extren访问 static id _instance; /** static : 修饰变量 1> 修饰全局变量 * 全局变量的作用域仅限于当前