OC单例模式

简介:

单例模式是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例类的特殊类。通过单例模式可以保证系统中一个类只有一个实例而且该实例易于外界访问,从而方便对实例个数的控制并节约系统资源。如果希望在系统中某个类的对象只能存在一个,单例模式是最好的解决方案。

显然单例模式的要点有三个;一是某个类只能有一个实例;二是它必须自行创建这个实例;三是它必须自行向整个系统提供这个实例。

从具体实现角度来说,就是以下三点:一是单例模式的类只提供私有的构造函数,二是类定义中含有一个该类的静态私有对象,三是该类提供了一个静态的共有的函数用于创建或获取它本身的静态私有对象。

例子:

A.h:

#import <Foundation/Foundation.h>

@interface A : NSObject

@property(assignint b;

+(A*) getA;

-(void) funAdd;

-(void) funClear;

@end


A.m:

#import "A.h"

@implementation A

+(A*)getA

{

//    nilNULL从字面意思来理解比较简单,nil是一个对象,而NULL是一个值,我的理解为nil是将对象设置为空,而NULL是将基本类型设置为空的。而且我们对于nil调用方法,不会产生crash或者抛出异常。

//    看一下用法

//    NSURL *url = nil

//    Class class = Nil

//    int *pointerInt = NULL

//    nil是一个对象指针为空,Nil是一个类指针为空,NULL是基本数据类型为空

    static A *a;

    if (a == Nil) {

        //a = [[A alloc] init];

        a = [A new];

    }

    return a;

}

-(void)funClear

{

    _b = 0;

}


-(void)funAdd

{

    _b++;

    NSLog(@"%i",_b);

}

@end


main:

#import <Foundation/Foundation.h>

#import "A.h"

int main(int argc, const char * argv[])

{


    @autoreleasepool {

        for (int i=0; i<10; i++) {

            [[A getAfunAdd];  //为什么只能调用一次funAdd?

            if (i == 5) {

                [[A getAfunClear];

            }

        }

    }

    return 0;

}


结果:

2013-07-30 14:42:58.607 2013-7-29作业1[1863:303] 1

2013-07-30 14:42:58.609 2013-7-29作业1[1863:303] 2

2013-07-30 14:42:58.610 2013-7-29作业1[1863:303] 3

2013-07-30 14:42:58.610 2013-7-29作业1[1863:303] 4

2013-07-30 14:42:58.611 2013-7-29作业1[1863:303] 5

2013-07-30 14:42:58.612 2013-7-29作业1[1863:303] 6

2013-07-30 14:42:58.612 2013-7-29作业1[1863:303] 1

2013-07-30 14:42:58.613 2013-7-29作业1[1863:303] 2

2013-07-30 14:42:58.613 2013-7-29作业1[1863:303] 3

2013-07-30 14:42:58.614 2013-7-29作业1[1863:303] 4

















本文转自蓬莱仙羽51CTO博客,原文链接:http://blog.51cto.com/dingxiaowei/1366509,如需转载请自行联系原作者


相关文章
|
网络安全 Apache
Apache服务器安装SSL证书
Apache服务器安装SSL证书
459 0
|
7月前
|
SQL 人工智能 数据库
SQL Server 2025 - 从本地到云端的 AI 就绪企业数据库
SQL Server 2025 - 从本地到云端的 AI 就绪企业数据库
482 0
SQL Server 2025 - 从本地到云端的 AI 就绪企业数据库
|
11月前
|
安全 UED
IM系统在体育直播网站中的重要性
IM(即时通讯)系统在体育直播平台中至关重要,提升用户体验、促进社交互动和增强平台活跃度。它支持实时互动、增强观赛氛围、构建社交网络、推送即时信息、创造商业价值并提供多元化互动体验。高并发性能、实时稳定性和用户安全是实现的关键。通过集成IM系统,平台能更好地满足观众互动需求,提升运营效益。 代码示例展示了如何在比赛数据响应中设置比赛ID、游戏ID、系列赛ID等基本信息,并检查是否有计划和关注标记。
|
12月前
|
存储 数据安全/隐私保护 Windows
数据恢复软件合集:盘点13款数据恢复软件
我们平时在使用电脑、手机、U盘等设备时,常常会因为误删除、格式化、系统故障或其他原因丢失重要数据。面对这样的情况,知道如何进行数据恢复会很有用。今天,小编为大家挑选了13款数据恢复软件,每款都有其独特之处,适合不同用户需求。需要恢复数据的友友们,自行去相关软件官网或是靠谱的下载站下载即可。
|
iOS开发 MacOS
macos排查并禁用系统占用的8021端口
macos排查并禁用系统占用的8021端口
381 0
|
人工智能 编解码 Linux
重磅!免费一键批量混剪工具它来了,一天上万短视频不是梦
详细介绍如何使用在MoneyPrinterPlus中是用批量混剪工具来自动快速生成短视频。
重磅!免费一键批量混剪工具它来了,一天上万短视频不是梦
|
存储 前端开发 区块链
常见的 EVM 版本以及它们的区别
常见的 EVM 版本以及它们的区别
308 5
|
消息中间件 存储 Apache
RocketMQ实战教程之常见概念和模型
Apache RocketMQ 实战教程介绍了其核心概念和模型。消息是基本的数据传输单元,主题是消息的分类容器,支持字节、数字和短划线命名,最长64个字符。消息类型包括普通、顺序、事务和定时/延时消息。消息队列是实际存储和传输消息的容器,是主题的分区。消费者分组是一组行为一致的消费者的逻辑集合,也有命名限制。此外,文档还提到了一些使用约束和建议,如主题和消费者组名的命名规则,消息大小限制,请求超时时间等。RocketMQ 提供了多种消息模型,包括发布/订阅模型,有助于理解和优化消息处理。
|
Android开发 iOS开发
ios后台播放声音的三种实现方式
ios后台播放声音的三种实现方式
1680 1
抖音最近很火的QQ在线价值评估网站源码(qq价值在线评估)
这个源码是很多年以前的了,最近又在抖音刷到别人直播需要刷礼物才能给你评测,所以又找了一下测试了可用,将源码上传后解压,访问可以直接使用。
1721 0
抖音最近很火的QQ在线价值评估网站源码(qq价值在线评估)