单例模式是iOS开发中常用的一种设计模式,目的在于创建一次对象,多地方使用。

系统中的单例例如:UIApplication、 NSUserDefaults 等,开发中我们可以用作用户管理。

Objective-C 单例定义

单例的定义方式有大概三种,gcd  和 互斥锁等

这里例举gcd创建

.h文件代码示例:

@interface User : NSObject
@property (nonatomic, copy) NSString *name;
@property (nonatomic, assign) NSNumber *age;
+(User *)shareUser;
@end

.m文件代码示例:

#import "User.h"@implementation User
static User * userManager = nil;+(instancetype)allocWithZone:(struct _NSZone *)zone{static  dispatch_once_t once;dispatch_once(&once, ^{  //还有这里需要加&if (userManager == nil) {  //注意:这里不是if(userManager)userManager = [[super allocWithZone:zone] init];//为了保证属性的一致性,属性的初始化建议在这里执行userManager.name = @"";userManager.age = [NSNumber numberWithInt:0];}});return userManager;
}+(User *)shareUser{return [[self alloc] init];
}@end

参考:cocoaChina

通过宏定义创建单例

可以将单例的定义写下一个宏定义工具中,方便直接调用。

宏定义代码示例:

#ifndef singletonInterface_h
#define singletonInterface_h// .h
#define singleton_interface(class) + (instancetype)sharedInstance;// .m
#define singleton_implementation(class) \
static class *_instance; \
\
+ (id)allocWithZone:(struct _NSZone *)zone \
{ \
static dispatch_once_t onceToken; \
dispatch_once(&onceToken, ^{ \
_instance = [super allocWithZone:zone]; \
}); \
\
return _instance; \
} \
\
+ (instancetype)sharedInstance \
{ \
if (_instance == nil) { \
_instance = [[class alloc] init]; \
} \
\
return _instance; \
}#endif /* singletonInterface_h */

宏定义使用示例

.h文件

@interface UserData : NSObject
singleton_interface(UserData)
@property(nonatomic,copy)LoginUserInfo *info;//-(BOOL)hasSetPayPassword;@end

.m文件

@implementation UserData
singleton_implementation(UserData)  //定义单例方法

单例Swift写法

相比OC,swift单例就简单多了。两个原则,静态类常量和初始话方法私有化

     var alarm:Alarm!//静态全局类常量static let manager:AlarmManager = AlarmManager()//私有化 初始化方法private override init() {super.init()}class func shared() -> AlarmManager { //类方法return manager}

iOS单例模式定义与使用相关推荐

  1. IOS单例模式及单例模式的优缺点

    单例模式的意思就是只有一个实例.单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例.这个类称为单例类. #import <Foundation/Foundation.h&g ...

  2. [iOS]-单例模式\通知\代理

    目录: 参考的博客 单例模式 什么是单例模式 单例模式的优缺点 优点: 缺点: 实现方式 懒汉式: 举一个真实的懒汉式创建单例的例子: 饿汉式: 通知 通知底层实现原理 NSNotification ...

  3. iOS宏定义的使用与规范

    2019独角兽企业重金招聘Python工程师标准>>> 宏定义在很多方面都会使用,例如定义高度.判断iOS系统.工具类,还有诸如文件路径.服务端api接口文档.为了对宏能够快速定位和 ...

  4. iOS enum 定义与使用

    枚举其实很重要,特别是在应用开发初期,服务器端数据格式需要更改得情况下,枚举和宏都能是程序简洁,并且改动小. 网上有个人写的言简意赅,适合初学 转自:http://blog.csdn.net/ysy4 ...

  5. iOS 单例模式全面解析

    2019独角兽企业重金招聘Python工程师标准>>> 我先列举一个苹果官方文档中的写法. static AccountManager *DefaultManager = nil; ...

  6. ios系统定义的url

    App-prefs:root=WIFI 无线局域网 App-Prefs:root=Bluetooth 蓝牙 App-prefs:root=INTERNET_TETHERING 个人热点 App-pre ...

  7. ios 单例模式 漫画设计模式 1

    欢迎转载,转载请注明出处 本文地址:http://blog.csdn.net/zhenggaoxing/article/details/42261689 这篇文章作为我设计模式的开篇,有必要介绍一下的 ...

  8. android中的单例模式,Android中的单例模式

    定义: 单例模式:确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例. 使用场景: 确保某一个类有且只有一个对象的场景,避免产生多个对象消耗过多的资源,或者某种类型的对象只应该有且只有一 ...

  9. iOS开发 - 面向对象设计的设计模式(一):创建型模式(附 Demo UML类图)

    继上一篇的面向对象设计的设计原则,本篇是面向对象设计系列的第二个部分:面向对象设计的设计模式的第一篇文章. 另外,本篇博客的代码和类图都保存在我的GitHub库中:中的Chapter2. 最开始说一下 ...

最新文章

  1. java游戏最终boss烛龙_游戏中劝退玩家的变态小怪!神装扛不住它一击,难度秒杀最终BOSS?...
  2. JTS基本概念和使用
  3. Python 分析天气,告诉你中秋应该去哪里
  4. Gray Code LeetCode 89
  5. 微信小程序通过getUserProfile和wx.login获取后端的token
  6. NLP13-LDA引发的一系活动
  7. 博客专题计划:《在实践中深入理解常见网络协议》
  8. mysql 添加最高权限设置_mysql 添加用户并设置权限
  9. dnsmasq安装配置
  10. 等高线生成地形_等高线一键变地形模型
  11. 图像型PDF如何免费转换成可编辑的文字
  12. golang 实现http mock server
  13. 计算机公式最小值,excel最小值函数
  14. I2C 挂死,SDA一直为低问题分析
  15. 第三次作业_03功能测试
  16. 斯坦福大学公开课:iOS8开发 第一课:课务,iOS8概述学习笔记
  17. jpg、png、jpeg区别与压缩等知识总结 —— 性能优化篇
  18. 转载至:http://blog.csdn.net/antony9118/article/details/51425581
  19. 【CodeForces】【状压DP】1155F-Delivery Oligopoly
  20. 正则表达式匹配从指定字符开始到指定字符结束的字符串

热门文章

  1. docker配置国内镜像源
  2. 刚进入win7系统就提示检测到一个硬盘问题的解决方法
  3. Linux 批量依赖库拷贝(ldd)
  4. 结构体内字节手动对齐(#pragam pack)
  5. 不少朋友在安装IDES 4.71的过程中都遇到了下面的出错提示:
  6. xen 虚拟机挂了,宿主机假死的问题追终,全思路
  7. 如何使用ember下拉框组件??
  8. 【转】java提高篇(十)-----详解匿名内部类
  9. 搭建服务器集群——Windows7系统中nginx与IIS服务器搭建集群实现负载均衡
  10. JQ中$(window).load和$(document).ready()使用,区别与执行顺序