ios创建单例

作者: 木头Lee | 来源:发表于2017-04-17 15:14 被阅读121次

最近公司项目其中的一个控制器需要做成单例,以保证收到推送或应用内消息时弹出的是同一个界面,看了下相关资料和视频,现把ios实现单例的几种方式总结一下:

dispatch

这种方式个人认为是最简单、最方便、最推荐的方式,且能够保证线程安全。缺点就是只能在ARC环境使用,非ARC方式不能使用

  • 定义一个类方法声明的宏LGSingletonH,并传入要创建单例的类名

#import <UIKit/UIKit.h>

@interface LGSingleton : NSObject

//******************************** 将类方法声明宏,传入类名 ********************************
#define LGSingletonH(ClassName) +(instancetype) share##ClassName;

@end

  • 再将单例实现的具体方法定义为一个宏LGSingletonM
@implementation LGSingleton

//********************************* 将方法的实现声明为宏 **********************************
#define LGSingletonM(ClassName) static id _instance;\
\
+(instancetype)allocWithZone:(struct _NSZone *)zone\
{\
    static dispatch_once_t onceToken;\
    dispatch_once(&onceToken, ^{\
        _instance = [super allocWithZone:zone];\
    });\
\
    return _instance;\
}\
\
\
+(instancetype)share##ClassName\
{\
    static dispatch_once_t onceToken;\
    dispatch_once(&onceToken, ^{\
        _instance = [[self alloc] init];\
    });\
\
    return _instance;\
}\
\
\
-(id)copyWithZone:(NSZone *)zone\
{\
    return _instance;\
}
@end

使用方法:

  • 在要创建单例的类的.h文件中,导入单例工具类LGSingleton.h头文件

  • 在要创建单例的类的.h文件中,直接写LGSingletonH宏并传入类名即可 Paste_Image.png
    Tips:LGSingletonH(Person)等价于+(instancetype) sharePerson;

  • 在要创建单例的类的.m文件中,实现单例方法,也就是直接写我们定义的LGSingletonM宏并传入对应类名即可。
    Paste_Image.png
    Tips:LGSingletonM(Person)宏等价于将我们在单例工具类LGSingleton中写的实现方法在要创建的单例类Person中复制了一遍,也即是将Person类的allocWithZone和copyWithZone方法重写了一遍,并提供了一个类方法创建单例

  • 测试效果:


    Paste_Image.png

  • LGSingleton.h文件下载:Github,直接将文件放入工程即可使用

coming soon ...

相关文章

  • iOS 创建单例的方法

    iOS 创建单例的方法 方法一: 方法二:

  • 单例

    iOS单例模式iOS之单例模式初探iOS单例详解

  • ios -- 创建单例

    + (JYueMyTaskManagerService*)sharedMyTaskService { static...

  • ios创建单例

    最近公司项目其中的一个控制器需要做成单例,以保证收到推送或应用内消息时弹出的是同一个界面,看了下相关资料和视频,现...

  • iOS单例创建

    常规的创建单例 .h文件中 .m文件 使用GCD写 .h中 .m文件中

  • iOS单例创建

  • iOS创建单例

    在开发过程中经常会遇到需要单例的时候,然后很多时候大家写的单例其实并不符合要求。下面介绍一个标准的单例。 一般来说...

  • iOS - 单例创建

    Swift创建单例 代码如下:Swift5 对应OC创建单例

  • iOS单例

    在iOS开发中单例用的非常普遍,比如说通知中心,NSUserDefauld等都都是单例模式,原来以为创建一个单例是...

  • iOS 单例模式

    关于单例模式的详解,看完这几篇,就完全了然了。iOS 单例模式iOS中的单例模式iOS单例的写法

网友评论

    本文标题:ios创建单例

    本文链接:https://www.haomeiwen.com/subject/obhtzttx.html