一个工具类的单例模式

作者: iHTCboy | 来源:发表于2015-07-26 12:07 被阅读1390次

最近写了个工具类,用来集成短信、邮件、电话、打开Safari/AppStore、打开相机或相册,但是写 delegate 的时候,发现有警告:

Incompatible pointer types assigning to 'id<MFMessageComposeViewControllerDelegate>' from 'Class'

最后,发现,用单例模式才可以。原因:类方法的self不能充当delegate

下面是stackoverflow里解决方法,构造单例模式:

Utility.h
@interface Utility : NSObject <AVAudioPlayerDelegate>
+ (Utility *)sharedUtility;
@end
Utility.m

@implementation Utility
+ (Utility *)sharedUtility
{
    static Utility *theUtility;
    @synchronized(self) {
        if (!theUtility)
            theUtility = [[self alloc] init];
    }
    return theUtility;
}

- (void)playAudioFromFileName:(NSString *)name ofType:(NSString *)type withPlayerFinishCallback:(SEL)callback onObject:(id)callbackObject
{
    ... 
    audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL: [self getResourceURLForName:name ofType:type] error: nil];
    audioPlayer.delegate = self;
    ...
}

@end
Usage

[[Utility sharedUtility] playAudioFromFileName:@"quack" ofType:"mp3" withPlayerFinishCallback:@selector(doneQuacking:) onObject:duck];

最后发现,生成单例的方法各不相同,下面是另外一种,至于用那一种更好,或者都一样?简主暂时也不知道。。

##static id _sharedInstance = nil;
+(instancetype)sharedInstance
{
    static dispatch_once_t p;
    dispatch_once(&p, ^{
        _sharedInstance = [[self alloc] init];
    });
    return _sharedInstance;
}

最后

  • 如果有什么疑问,可以在评论区一起讨论;
  • 如果有什么不正确的地方,欢迎指导!

注:本文首发于 iHTCboy's blog,如若转载,请注明来源。

相关文章

  • 如何正确地写出单例模式

    什么是单例模式 一个类在JVM只有一个实例,并且提供一个全局访问入口。单例模式适用无状态的工具类,比如日志工具、字...

  • 单例模式 ,简单工厂,抽象工厂

    1.单例模式 如果一个类始终只能创建一个实例,则这个类成为单例类,这种设计模式称为单例模式 使用单例模式的优势: ...

  • 单例模式

    什么是单例模式? 一个类只允许创建一个实例,那个类就是单例类。这个模式就是单例模式。单例模式实现方式:饿汉式:实现...

  • python高级中的单例、异常、模块

    一、单例模式 单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例,这个类称为单例类,单例模式...

  • 单例模式

    1. 什么是单例模式? 创建单例类的方法叫单例模式. 单例类, 就是只能产生一个对象的类. 2. 为什么使用单例模...

  • 设计模式(单例模式)

    单例模式 单例模式有以下特点: 单例类只能有一个实例 单例类必须自己创建自己的唯一实例 单例类必须给所有其他对象提...

  • Java单例设计模式的理解与常规实现方式

    1:Java中单例模式是一种常见的设计模式,单例模式有以下特点: 单例类只能有一个实例。 单例类必须自...

  • 常用的设计模式

    Java中常用的设计模式 1.单例模式 单例模式有以下特点: 1、单例类只能有一个实例。 2、单例类必须自己创建自...

  • OC - 单例模式

    导读: 一、什么是单例模式 二、单例的作用 三、常见的单例类 四、自定义单例类的方法 一、什么是单例模式 单例模式...

  • Swift 和 Objective-C 单例模式详解

    单例模式分为严格单例模式和不严格单例模式。单例模式要求一个类有一个实例,有公开接口可以访问这个实例。严格单例模式,...

网友评论

  • 易明轩轩主:最后一个官方推荐的, 简单方便
  • MD5Ryan:如果是我的话, 我宁愿继承一下MFMessageComposeViewController, 把delegate的方式转换为block的方式, 注意就可以继续用类方法了
    iHTCboy:@MD5Ryan 谢谢分享思想!
  • JamesYu:这个单例更好的是后面的一个,也是官方推荐的!第一种也行,但是每次都加锁,所以不太好
    iHTCboy:@JamesYu 好!谢谢分享!

本文标题:一个工具类的单例模式

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