单例设计模式 参考

UIApplication sharedApplocation 详细解释 :参考

通讯录的helper 类的读取本地plist 文件的时候,使用的单例
单例的要点有三个:一个类只能有一个实例;这个实例只能有类本身自己创建;这个类必须为全系统提供使用这个实例;
单例模式的优点: 能够阻止其他对象实例化自己类的副本,从而保证所有的对象都能够访问唯一的实例。
单例模式的灵活性:因为类控制了实例化过程,所以类可以更加灵活的修改实例化的过程。
在IOS中的单例模式一般要做以下的四个步骤:
为单例对象实现一个静态实例,并初始化,然后设置成nil
实现一个实例的构造方法检查上面声明的静态实例是否为nil,如果是空则新建并返回一个本类的实例
重写allcWithZone方法,用来保证其他人直接使用allock 和 init 视图获得一个新的实例的时候不产生一个新的实例
适当的实现 allockWithZone ,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

单例代码

单例的写法:

第一步:在单例类里声明单例方法。

第二步:在单例类的实现方法里去实现单例方法。注意实现的时候的固定写法。@synchronized(self){}

@implementation DataBaseHelper

//单例方法

static DataBaseHelper *helper = nil;

+ (DataBaseHelper *)defaultDBHelper {

@synchronized(self) {

if (!helper) {

helper = [[DataBaseHelper alloc] init];

//程序每次运行,只从数据库里读取一次数据即可

[self createTableInDataBase];//创建表

[self selectFromDataBase];//读取数据

}

}

return helper;

}

UI:单例的写法的更多相关文章

  1. 关于Java单例

    参考资料:http://blog.csdn.net/haoel/article/details/4028232 public class SingletonTest implements Runnab ...

  2. Swift中的单例的实现方式

    单例在iOS日常开发中是一个很常用的模式.对于希望在 app 的生命周期中只应该存在一个的对象,保证对象的唯一性的时候,一般都会使用单例来实现功能.在OC单例的写法如下: @implementatio ...

  3. OC基础 单例

    #undef  AS_SINGLETON   #define AS_SINGLETON( __class ) \       + (__class *)sharedInstance;      #un ...

  4. Swift 2.0 单例的用法

    单例我们项目中是很常用的,今天刚学了在swift中怎么写单例和调用单例.下面我们简单的介绍一下.我们先看看Swift单例的写法: import UIKit class Shareinstance: N ...

  5. Javascript 设计模式 单例

    转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/30490955 一直很喜欢Js,,,今天写一个Js的单例模式实现以及用法. 1.单 ...

  6. Hi,我们再来聊一聊Java的单例吧(转)

    1. 前言 单例(Singleton)应该是开发者们最熟悉的设计模式了,并且好像也是最容易实现的——基本上每个开发者都能够随手写出——但是,真的是这样吗? 作为一个Java开发者,也许你觉得自己对单例 ...

  7. 完美单例宏定义(兼容ARC和MRC),项目中可以直接使用

     单例模式: 1.永远只分配一块内存来创建对象 2.提供一个类方法, 返回内部唯一的一个对象(一个实例) 3.最好保证init方法也只初始化一次 写一个宏定义文件,传入宏定义函数名,自动生成符合类名的 ...

  8. iOS单例创建的一点疑惑

    线程安全的单例常用写法, +(AccountManager *)sharedManager{ static AccountManager *defaultManager = nil; disptch_ ...

  9. C++并发与多线程学习笔记--单例设计模式、共享数据分析

    设计模式 共享数据分析 call_once 设计模式 开发程序中的一些特殊写法,这些写法和常规写法不一样,但是程序灵活,维护起来方便,别人接管起来,阅读代码的时候都会很痛苦.用设计模式理念写出来的代码 ...

随机推荐

  1. middle(bzoj 2653)

    Description 一个长度为n的序列a,设其排过序之后为b,其中位数定义为b[n/2],其中a,b从0开始标号,除法取下整. 给你一个长度为n的序列s. 回答Q个这样的询问:s的左端点在[a,b ...

  2. hdu 5188 zhx and contest [ 排序 + 背包 ]

    传送门 zhx and contest Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Othe ...

  3. [Bzoj1022][SHOI2008]小约翰的游戏John(博弈论)

    1022: [SHOI2008]小约翰的游戏John Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 2976  Solved: 1894[Submit] ...

  4. Codeforces 920G(二分+容斥)

    题意: 定义F(x,p)表示的是一个数列{y},其中gcd(y,p)=1且y>x 给出x,p,k,求出F(x,p)的第k项 x,p,k<=10^6 分析: 很容易想到先二分,再做差 然后问 ...

  5. Spring MVC的WebMvcConfigurerAdapter用法收集(零配置,无XML配置)

    原理先不了解,只记录常用方法 用法: @EnableWebMvc 开启MVC配置,相当于 <?xml version="1.0" encoding="UTF-8&q ...

  6. 基于Hexo + Git + Nginx的博客发布

    进过上一篇<树莓派搭建私人服务器>,我们已经有一个私人服务器了,现在需要做点什么实际事情了,先搭一个博客分享自己的经验吧. 相关文章:1.<树莓派搭建私人服务器>(http:/ ...

  7. Python中文GBK编码解决实例

    http://eatsalt.blog.163.com/blog/static/879402662009420508748/ #coding:gbk l=['我'.decode('gbk'),'我'. ...

  8. Bootstrap的js插件之弹出框(popover)

    data-toggle="popover"--使弹出框可以切换状态: title--设置弹出框的标题: data-content--设置弹出框的内容部分: data-placeme ...

  9. 各项异性滤波简单介绍Anisotropic Filtering(AF)

    本文主要整理简绍来自互联网的各项异性滤波的知识. 原文链接:http://www.linuxgraphics.cn/graphics/using_anisotropic_texture_filteri ...

  10. setenv LD_LIBRARY_PATH

    For most Linux binaries, NCL was built using gcc and gfortran. This may cause a dependency on a file ...