Object-C 学习笔记(六)---单例设计模式
2013-12-02 17:10
337 查看
说到单例,在java学习07-单例设计模式已经说的很清楚,Object-C也是一门面向对象的语言,于是除了写法不同,其他都是大同小异.
---未来会出一套 "设计模式"学习的笔记
原则:
(1) 不能直接调用构造方法---私有
(2)对象内存只能初始化一次---static
(3)使用其他静态接口(方法)把静态的对象返回
废话少说了,让我们直接上程序吧.
笔者认为单例不需要使用同步,静态区是一个独立的内存块,静态修饰的变量或方法随着类的加载而加载,只初始化一次,优先与对象的存在,就算启动多个线程,也不可能再初始化静态对象,使用同步会使系统内部增加判断,负载增加,程序执行降低效率….
但是,有时候同步是必要的,详细可以去看同步控制单例,http://www.ibm.com/developerworks/cn/java/l-singleton/
---未来会出一套 "设计模式"学习的笔记
原则:
(1) 不能直接调用构造方法---私有
(2)对象内存只能初始化一次---static
(3)使用其他静态接口(方法)把静态的对象返回
废话少说了,让我们直接上程序吧.
// // People.h // Single // DRAGON // Created by 5016 on 13-12-2. // Copyright (c) 2013年 dradon. All rights reserved. // #import <Foundation/Foundation.h> @interface People : NSObject<NScopying> //定义静态方法 +(People *)getInstance; @end
// // People.m // Single // DRAGON // Created by 5016 on 13-12-2. // Copyright (c) 2013年 dradon. All rights reserved. // #import "People.h" @implementation People static People *single = nil; +(People *)getInstance { @synchronized(self)//线程锁,可以不使用,使用之后使线程安全,但是执行速率下降 { if (!single) { single = [[[self class] alloc]init]; } } return single; } #pragma mark 下面方法确保只有一个实例 //当调用alloc +(id)allocWithZone:(NSZone *)zone { if (!single) { single = [super allocWithZone:zone]; } return single; } //覆盖copy协议 -(id)copyWithZone:(NSZone *)zone { return single; } -(id)retain { return single; } -(oneway void)release { } -(id)autorelease { return single; } -(NSUInteger)retainCount { return UINT_MAX;//返回一个>0的值 } -(void)dealloc { [super dealloc]; } @end
// // main.m // Single // DRAGON // Created by 5016 on 13-12-2. // Copyright (c) 2013年 dradon. All rights reserved. // #import <Foundation/Foundation.h> #import "People.h" int main(int argc, const char * argv[]) { People* person1 = [People getInstance]; People* person2 = [People getInstance]; //判断是否为同一对象堆内存空间 if (person1 == person2) { NSLog(@"true");//当然是打印true }else{ NSLog(@"false"); } return 0; }
笔者认为单例不需要使用同步,静态区是一个独立的内存块,静态修饰的变量或方法随着类的加载而加载,只初始化一次,优先与对象的存在,就算启动多个线程,也不可能再初始化静态对象,使用同步会使系统内部增加判断,负载增加,程序执行降低效率….
但是,有时候同步是必要的,详细可以去看同步控制单例,http://www.ibm.com/developerworks/cn/java/l-singleton/
相关文章推荐
- 设计模式学习笔记—23个模式
- 设计模式学习笔记(二十一)—Composite模式
- 【学习笔记javascript设计模式与开发实践----1】
- 二十、职责链模式——设计模式学习笔记
- C#设计模式学习笔记-单例模式
- 设计模式学习笔记--备忘录模式
- 《Head First 设计模式》学习笔记: 命令模式
- 设计模式学习笔记(1)
- 【设计模式】学习笔记之设计原则
- java/android 设计模式学习笔记(10)---建造者模式
- 设计模式学习笔记---composite模式
- 设计模式学习笔记(五)—Abstract Factory抽象工厂模式
- 设计模式学习笔记——模板方法模式
- 设计模式学习笔记二:简单工厂模式
- java 设计模式学习笔记十五 strategy 策略设计模式
- java学习笔记-设计模式1(简介)
- Head First 设计模式笔记之------学习总结
- 设计模式学习笔记(四)--工厂模式
- 设计模式C++学习笔记之一(Strategy策略模式)
- C++设计模式学习笔记一:简单工厂模式