【iOS7的一些总结】15、单例设计模式-阿里云开发者社区

开发者社区> jerry.yin> 正文

【iOS7的一些总结】15、单例设计模式

简介: 1、基本概念 所谓单例,即某一个类始终只能返回一个实例,也可以理解为类本身就是一个实例。单例类通常适合作为某些保存全局应用信息的全局对象,以及部分耗费大量系统资源的重量级对象。
+关注继续查看

1、基本概念

所谓单例,即某一个类始终只能返回一个实例,也可以理解为类本身就是一个实例。单例类通常适合作为某些保存全局应用信息的全局对象,以及部分耗费大量系统资源的重量级对象。通过这种模式可以更简洁地涉及代码,或者提高应用的性能。常用的单例类有NSFileManager、NSUserDefault等。


2、创建单例涉及模式的基本步骤

(1)创建单例对象的静态实例,初始化为nil;

(2)创建类的类工厂方法,只有在这个类的实例为nil时生成一个该类的实例;

(3)重写allocWithZone方法,防止在alloc时产生另一个对象;

(4)实现NSCopy协议,覆盖release、autorelease、retain、retainCount方法以保证单例的状态;

(5)多线程环境中,使用@synchronized关键字,确保静态实例正确创建和初始化。

以下是一个单例类的定义事例:

//
//  UserContext.h
//  SingletonDemo
//
//  Created by YinWenjie on 14-12-11.
//  Copyright (c) 2014年 YinWenjie. All rights reserved.
//

#import <Foundation/Foundation.h>

@interface UserContext : NSObject

@property (nonatomic, copy) NSString *strName;
@property (nonatomic, copy) NSString *strAddr;

+ (id)shareContext;

@end
//
//  UserContext.m
//  SingletonDemo
//
//  Created by YinWenjie on 14-12-11.
//  Copyright (c) 2014年 YinWenjie. All rights reserved.
//

#import "UserContext.h"

static UserContext *singletonInstance = nil;

@implementation UserContext

+ (id)shareContext
{
    @synchronized(self)
    {
        if (singletonInstance == nil)
        {
            singletonInstance = [[[self class] alloc] init];
        }
    }
    return singletonInstance;
}

#pragma mark - Make sure that only one instance is created
+ (id)allocWithZone:(struct _NSZone *)zone
{
    if (singletonInstance == nil)
    {
        singletonInstance = [super allocWithZone:zone];
    }
    return singletonInstance;
}

- (id)copyWithZone:(struct _NSZone *)zone
{
    return singletonInstance;
}

- (id)retain
{
    return singletonInstance;
}

- (oneway void)release
{
    
}

- (id)autorelease
{
    return singletonInstance;
}

- (NSUInteger)retainCount
{
    return UINTMAX_MAX;
}

@end


版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
设计模式-单例模式
单例模式(Singleton Pattern) 什么是单例模式 一个对象只能有一个实例,所有对象对它的引用都指向同一个内存地址 示例代码如下 1. 懒汉式加载 public class Singleton { // 构造一个私有的构造器 p...
897 0
设计模式之单例模式
设计模式之单例模式 一般情况下一个类能否做成单例,就在于,这个类在整个应用中,同一时刻有且只有一种状态。 第一种单例模式的构造方式。 public class Singleton{ //一个静态的实例 private static Singleton singleton; //私有化构造函数 private Singleton(){
783 0
iOS 11 安全区域适配总结(转)
原文: http://www.jianshu.com/p/efbc8619d56b 导语:本文主要是对iOS 11下APP中tableView内容下移20pt或下移64pt的问题适配的一个总结。
1013 0
【iOS7的一些总结】12、使用UIView的一种有效方法
在一个典型的MVC结构中,Model部分负责保存目标数据,View部分主要负责实现数据的界面以及将数据显示出来,二者在Controller的操作下协同工作。
642 0
iOS Quartz 2D相关笔记总结笔记 韩俊强的博客
一、基本理论和基本代码 概念总结 Quartz 2D是一个二维绘图引擎,同时支持iOS和Mac系统。Quartz 2D能完成的工作:绘制图形 : 线条,三角形,矩形,圆,弧等;绘制文字绘制,生成图片(图像)读取,生成PDF截图,裁剪图片自定义UI控件等Quartz2D提供了以下几种类型的Gra...
701 0
【iOS7的一些总结】13、UIScrollView的概念和基本使用方法
1、UIScrollView的基本概念 在iOS应用中,使用UIView类来显示一个视图。UIView只是最基本的视图类,单单靠UIView来方便地完成复杂应用开发是不可能的,因此需要多种更加强大的派生类来丰富UIKit的类库。
766 0
+关注
jerry.yin
毕业于上海大学通信与信息工程学院,从事流媒体和视频编解码的研究与开发工作; 研究领域包括视频编解码标准、视频处理和流媒体技术、移动互联网技术等。
182
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载