=====================================================
原帖:http://www.cnblogs.com/lyanet/archive/2013/01/11/2856468.html
单例模式的意思就是只有一个实例。单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。这个类称为单例类。
1.单例模式的要点:
显然单例模式的要点有三个;一是某个类只能有一个实例;二是它必须自行创建这个实例;三是它必须自行向整个系统提供这个实例。
2.单例模式的优点:
1.实例控制:Singleton 会阻止其他对象实例化其自己的 Singleton 对象的副本,从而确保所有对象都访问唯一实例。
2.灵活性:因为类控制了实例化过程,所以类可以更加灵活修改实例化过程
IOS中的单例模式
在objective-c中要实现一个单例类,至少需要做以下四个步骤:
1、为单例对象实现一个静态实例,并初始化,然后设置成nil,
2、实现一个实例构造方法检查上面声明的静态实例是否为nil,如果是则新建并返回一个本类的实例,
3、重写allocWithZone方法,用来保证其他人直接使用alloc和init试图获得一个新实力的时候不产生一个新实例,
4、适当实现allocWitheZone,copyWithZone,release和autorelease。
=====================================================
=====================================================
两种方式:
原帖:http://webfrogs.me/2013/04/01/ios-singleton/
单例模式算是开发中比较常见的一种模式了。在iOS中,单例有两种实现方式(至少我目前只发现两种)。
根据线程安全的实现来区分,
一种是使用
@synchronized,
另一种是使用GCD的
dispatch_once函数。
=====================================================
GlobalConstant.h
#import <Foundation/Foundation.h>
@interface GlobalConstant : NSObject
//属性值
@property(nonatomic,copy) NSString *requestURL;
@property(nonatomic,copy) NSString *ID;
@property(nonatomic,copy) NSString *userID;
@property(nonatomic,copy) NSString *userName;
+(GlobalConstant *)defaultConstant;//这是关键
@end
#import "GlobalConstant.h"
static GlobalConstant *sharedSingleton = nil;
@implementation GlobalConstant
@synthesize ID;
@synthesize requestURL ;
@synthesize userID ;
@synthesize userName;
@synthesize goodsKillDic;
-(id)init {
@synchronized(self) {
self = [super init];
requestURL = @"http://192.168.1.104/DemoTest/";
return self;
}
}
+(GlobalConstant *)defaultConstant {
@synchronized(self)
{
if (!sharedSingleton)
sharedSingleton = [[self alloc] init];
return sharedSingleton;
}
}
/**
+ (InstanceClass *)defaultInstance {
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
[[GlobalConstant alloc] init];
});
return sharedSingleton;
}
*/
///重写allocWithZone方法 防止直接 alloc出现副本
+ (id) allocWithZone:(NSZone *)zone {
@synchronized (self) {
if (sharedSingleton == nil) {
sharedSingleton = [super allocWithZone:zone];
return sharedSingleton;
}
}
return nil;
}
- (id) copyWithZone:(NSZone *)zone {
return self;
}
(id)retain {
return self;
}
- (unsigned) retainCount
{
return UINT_MAX;
}
-(oneway void)release {
}
-(id)autorelease {
return self;
}
@end
分享到:
相关推荐
"设计模式单例模式和工厂模式综合应用"的主题聚焦于两种常用的设计模式:单例模式和工厂模式,并探讨它们如何协同工作来实现高效、灵活的代码结构。这个主题尤其适用于Java编程语言,因为Java的面向对象特性使得设计...
6. **设计模式**:在源码中,可能会发现常见的设计模式,如MVC(模型-视图-控制器)、MVVM(模型-视图-视图模型)、单例模式等。这些模式有助于代码组织和复用。 7. **测试与调试**:一个良好的开源项目应该包含...
接着,MVC和MVVM是iOS开发中常用的两种架构模式。MVC(Model-View-Controller)将应用分为三个主要的组件:Model负责数据管理,View负责展示,Controller负责视图与数据之间的交互。MVC的优点在于控制器的瘦身和视图...
我们将围绕Objective-C和Swift两种主要的iOS编程语言展开讨论,这两个语言是构建iPhone应用的核心工具。 Objective-C是苹果公司早期推出的编程语言,它基于C语言,增加了Smalltalk式的消息传递机制。Objective-C是...
单例模式是一种确保类只有一个实例,并提供全局访问点的设计模式。在多线程环境下,实现单例需要考虑线程安全问题,常用的方法是使用@synchronized块确保线程同步。 11. 界面间传值的方法 界面间传值的方法包括通过...
Segue 是在故事版中表示页面间跳转的一种方式,分为显式和隐式两种。显式 segue 是通过控制拖拽来创建,而隐式 segue 则是在触发特定事件(如按钮点击)时自动创建。在 segue 上右键可以设置其标识符,以便在代码中...
在Android中,可以通过以下两种方式使用`Intent`进行数据传输: 1. **Serializable**:通过实现`Serializable`接口,可以将对象序列化为字节流,再通过`Intent`传输。 2. **Parcelable**:相比于`Serializable`,`...
- **单例模式**: 确保一个类只有一个实例,并提供一个全局访问点。 - **委托模式**: 允许一个对象将其某些职责委托给另一个对象,通常用于处理事件响应。 - **响应者链**: 定义了一个对象链来处理事件,每个对象都有...
9. ** NSUserDefault 和单例模式 ** 对于需要跨多个视图控制器共享的数据,可以考虑使用 `NSUserDefaults` 或全局单例对象来存储数据。 10. ** Model 类的共享实例 ** 如果数据是模型的一部分,可以创建一个...
理解两种语言的语法特性,如Objective-C的消息传递和Category,以及Swift的可选类型、泛型和闭包,是面试的基础。 2. **UIKit框架**:UIKit是构建iOS用户界面的核心,包括UIView、UIViewController、UIButton等类。...
9. **NSView初始化**:NSView有两种主要的初始化方式,即`initWithFrame:`和`initWithCoder:`,前者用于基于代码的初始化,后者用于Interface Builder中的 nib 文件加载。 10. **多任务和后台运行**:iOS 4引入了多...
- **常用设计模式**:除了 MVC 外,Cocoa 还使用了其他几种设计模式,如代理模式(Delegate)、观察者模式(Observer)和单例模式(Singleton)等。 - **模式的优势**:这些设计模式有助于解决常见的编程问题,提高代码的...
在 iOS 开发中,依赖注入是一种设计模式,它允许我们将对象的依赖关系在运行时动态地传入,而不是在类的初始化时硬编码。这有助于降低耦合度,使得单元测试变得更加容易,因为我们可以为测试创建模拟对象,而无需...
目前市场业务中在产品以及其他项目的认证和检测方面存在诸多不便,用户需要实地考察并频繁与检测单位沟通,填写繁琐的纸质检测报告、当面送递样品,对于检测环节中存在的问题难以及时交互并处理。市场上相应的检测...
常见的设计模式有工厂模式、单例模式、观察者模式、装饰器模式、策略模式等,它们都是面向对象编程中的重要概念,有助于提高代码可重用性和可维护性。 从文件名"it_books-master"来看,这可能是一个项目的主分支...