这段时间公司基本没有什么业务,也正好总结总结以前用过的东西,跟大家简单分享一下,相互学习一下。直接主题,说一下我印象中的单例设计模式,本篇主要围绕下面4个问题说下:
1.单例是什么?
单例就是一种常用的设计模式,就是一个类在系统中只有一个实例对象,通过全局的一个入口对这个实例对象进行访问,就是这么简单。
2.单例的优缺点?
优点:
a.可以阻止其他对象实例化单例对象的副本,从而确保所有对象都访问唯一实例;
b.系统中只存在该类的一个实例对象,节约系统资源;
缺点:
a.单例对象一旦被创建,单例对象的指针就会一直保存在静态区中,单例对象在堆中分配的内存空间会一直到应用程序终止之后才被释放掉;
b.如果实例对象长期不使用可能会被系统回收,导致对象状态丢失。
3.iOS提供的单例有哪些?
iOS SDK中有许多类使用了单例模式,例如说当iOS程序启动的时候会先调用UIApplicationMain方法,在这个方法中,会实例化一个UIApplication对象,而这个UIApplication就用到了实例。在UIApplicationMain方法中初始化之后,程序中其他的任何地方调用shareApplication方法都将返回一个与当前应用程序相关的UIApplication的实例,下面是我平时用到的系统提供的单例类。
名称 | 用法 | 作用 |
UIApplication | [UIApplication sharedApplication] | 应用程序实例,核心作用是提供了iOS程序运行期间的控制和协作工作 |
NSURLCache | [NSURLCache sharedURLCache] | 请求缓存实例 |
NSUserDefaults | [NSUserDefaults standardUserDefaults] | 应用程序设置实例,作用是数据持久化 |
NSFileManager | [NSFileManager defaultManager] | 文件管理实例 |
NSNotificationCenter | [NSNotificationCenter defaultCenter] | 通知实例 |
还有一个UIWindow ,就不写表格里了。
4.单例的写法是什么?
//
// Singleton.h
// 单例模式
//
// Created by Kity_Pei on 16/4/27.
// Copyright © 2016年 Kity_Pei. All rights reserved.
//
#import <Foundation/Foundation.h>
@interface Singleton : NSObject
+ (Singleton *)defaultManger;
@end
//
// Singleton.m
// 单例模式
//
// Created by Kity_Pei on 16/4/27.
// Copyright © 2016年 Kity_Pei. All rights reserved.
//
#import "Singleton.h"
@implementation Singleton
static Singleton *defaultManager = nil;
+ (Singleton *)defaultManger
{
@synchronized (self)
{
if (defaultManager == nil)
{
defaultManager = [[self alloc] init];
}
}
return defaultManager;
}
+ (id)allocWithZone:(struct _NSZone *)zone
{
@synchronized (self)
{
if (defaultManager == nil)
{
defaultManager = [super allocWithZone:zone];
}
}
return defaultManager;
}
//覆盖该方法确保通过copy产生对象时对象的唯一性
- (id)copy
{
return self;
}
//覆盖该方法确保通过mutableCopy产生对象时对象的唯一性
- (id)mutableCopy
{
return self;
}
@end