当前位置:网站首页>单例模式(Singleton)
单例模式(Singleton)
2022-07-25 09:21:00 【山河丘壑】
系列文章目录
第一章 OC之单例模式
第二章 OC之对象初始化
第三章 OC之类和协议
第四章 OC之main函数的操作和一些基础概念
前言
提示:本篇我们谈一下关于单例模式
- 概念
- 创建
一、一些关于单例的概念
定义:
如果一个类始终只能创建一个实例,则这个类被称为单例类
为什么要使用单例模式?
有时候我们需要一个全局的对象,而且要保证全局有且只有一份即可,这时候就需要用到单例设计模式,需要注意:在多线程的环境下做好线程保护。
单例模式的结构:
单例类:包含一个实例且能自行创建这个实例的类
访问类:使用单例的类
二、static
在创建单例模式前,我们先来了解一下static关键字
static关键字只能修饰局部变量全局变量和函数
static修饰局部变量表示将该局部变量存储在静态区
修饰全局变量表示限制该全局变量只能在当前文件中访问
修饰函数用于限制函数只能在当前源文件中使用
特点
内存存储区:静态内存存储区在整个项目工程程序运行期间都存在
优点:
全局变量
不会被其他分支文件远程访问,修改
在其他文件中可以使用和static关键字修饰的相同字段,不会冲突
局部变量
作用域仍为局部作用域,当定义该静态局部变量符号或局部函数语句块结束时,作用域随之结束、
函数
静态函数不能被项目工程中其他文件所调用
三、创建
普通创建
这里例是类的定义
#import <Foundation/Foundation.h>
NS_ASSUME_NONNULL_BEGIN
@interface FKSingleton : NSObject
+ (id)instance;
@end
NS_ASSUME_NONNULL_END
测试:
#import<Foundation/Foundation.h>
#import"FKSingleton.h"
@implementation FKSingleton
static id instance = nil;
+ (id)instance {
if (!instance) {
instance = [[super alloc]init];
}
return instance;
}
@end
int main(){
@autoreleasepool {
if([FKSingleton instance] == [FKSingleton instance]){
NSLog(@"1");
} else{
NSLog(@"0");
}
}
}
代码运行结果
返回1说明两次创建的实例相等
我们通过控制instance类方法来获取FKSingleton实例时,程序最多只产生一个实例,在main函数中调用这个实例时,可以看到两次产生的对象是一个对象。
使用dispatch_once
类的实现
#import <Foundation/Foundation.h>
NS_ASSUME_NONNULL_BEGIN
@interface FKSingleton : NSObject
+ (id)instance;
@end
NS_ASSUME_NONNULL_END
测试:
#import<Foundation/Foundation.h>
#import"FKSingleton.h"
@implementation FKSingleton
static id instance = nil;
+ (id)instance2{
static dispatch_once_t onceToken;
dispatch_once(&onceToken,^{
instance = [[self alloc]init];
});
return instance;
}
@end
int main(){
@autoreleasepool {
if([FKSingleton instance2] == [FKSingleton instance2]){
NSLog(@"1");
} else{
NSLog(@"0");
}
}
}
结果:
边栏推荐
- Numpy- array属性、改变形状函数、基本运算
- *7-2 CCF 2015-09-2 日期计算
- OverTheWire-Natas
- [GYCTF2020]Node Game
- @3-1 CCF 2020-09-1 称检测点查询
- The interviewer asked: how to prevent oversold? There are several ways to achieve it
- ~1 ccf 2022-06-2 寻宝!大冒险!
- How can technologists start their personal brand? Exclusive teaching of top five KOLs
- 深入理解static关键字
- ~3 ccf 2022-03-2 出行计划
猜你喜欢
随机推荐
A brief introduction to the interest of convolutional neural networks
PHP介绍
OverTheWire-Natas
Thick willow dustpan, thin willow bucket, who hates reptile man? Asynchronous synergism, half a second to strip away a novel
ActiveMQ -- dead letter queue
C#语言和SQL Server数据库技术
ActiveMQ -- JDBC with persistent mechanism
matplotlib数据可视化三分钟入门,半小时入魔?
&lt;T&gt;泛型方法演示
数据控制语言(DCL)
变量名可以用中文?直接把人干蒙了
多态和接口
深入理解static关键字
Deep understanding of static keyword
C#语言和SQL Server数据库技术
作业7.19 顺序表
Publish Yum private server using nexus3 (offline intranet)
@2-1 CCF 2020-12-01 期末预测之安全指数
MySQL排序
TCP网络应用程序开发流程



![[GKCTF 2021]easynode](/img/f0/1daf6f83fea66fdefd55608cbddac6.png)

![[HCTF 2018]admin](/img/d7/f0155c72d3fbddf0a8c1796a179a0f.png)


![[GYCTF2020]Ez_ Express](/img/ce/02b90708f215715bb53cacfd4c21f0.png)
