Object-C 学习笔记(六)---单例设计模式

原创 2013年12月02日 17:10:48

说到单例,在java学习07-单例设计模式已经说的很清楚,Object-C也是一门面向对象的语言,于是除了写法不同,其他都是大同小异.

---未来会出一套 "设计模式"学习的笔记奋斗


原则:

(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/


相关文章推荐

Object-C 学习笔记(IOS程序设计课程)01

今年的秋季课程,我选修了IOS程序设计。虽然现在IOS编程都在主推用Swift语言,但是老师说起码这几年市面上90%+的APP还是用OC写的,因此上课的内容还是OC的相关知识。不过我们老师上课的速度有...
  • kqZhu
  • kqZhu
  • 2016年10月20日 12:10
  • 566

Object-C 中实现 Singleton (单例) 模式

撰写本文参考于网上的一些帖子,资料,文档。 关于 面向对象的设计模式 对于面向对象的设计模式,想必大家并不陌生吧。 纵观23种设计模式中,数单例模式(Singleton)和工厂模式(Fa...

从别人写的 Object-C 中 Singleton (单例) 模式 中的一些理解

关于 面向对象的设计模式 对于面向对象的设计模式,想必大家并不陌生吧。 纵观23种设计模式中,数单例模式(Singleton)和工厂模式(Factory Method)最为熟悉和基础吧...

黑马程序员_java基础学习笔记之单例设计模式

------- android培训、java培训、期待与您交流! ---------- 单例设计模式:解决一个类在内存中存在一个对象。 想要保证对象的唯一。 1.为了避免其他程序过多的建立该类对...

黑马程序员 学习笔记——Java 二十三设计模式之单例

----------------------android培训 、java培训、期待与您交流! ---------------------- Java 中解决某一问题最行之有效的方法是设计模式。...

Java基础06天 学习笔记_面向对象(Static静态,JavaAPI,单例设计模式)

01 Static 关键字 多个对象中存在共同数据: 如 country (CN) 没有必要没一个对象都有一个CN, 浪费空间   static String country = "...
  • fafrifa
  • fafrifa
  • 2014年09月01日 07:24
  • 368

Java 单例设计模式 与 代码优化 学习笔记

本文主要学习记录自:JavaSE第二季 第30讲 单例设计模式 单例设计模式:保证一个类仅有一个实例,并提供一个访问它的全局访问点。 1、构造方法私有化 2、声明一个本类对象 3、给外部提供一个静...

黑马程序员Java学习笔记之单例设计模式

java中单例模式是一种常见的设计模式。       一、单例模式有以下特点:             1、单例类只能有一个实例。             2、单例类必须自己创建自己的唯一实例。   ...

java学习笔记:面向对象编程之工具类的创建与单例设计模式

ObjectDemo.java public class ObjectDemo { public static void main(String[] args) { int arr[] =ne...

【学习笔记06】java面向对象-main方法、单例设计模式

main函数的详解: public : 公共的。 权限是最大,在任何情况下都可以访问。 private   原因: 为了保证让jvm在任何情况下都可以访问到main方法。 static:...
  • faded_
  • faded_
  • 2017年05月03日 11:55
  • 137
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Object-C 学习笔记(六)---单例设计模式
举报原因:
原因补充:

(最多只允许输入30个字)