iOS App开发中使用设计模式中的单例模式的实例解析

 更新时间:2016年05月11日 12:03:31   作者:珲少  
单例模式是最简单和基本的一种设计模式,下面我们就简单解读一下iOS中单例设计模式的用法,示例代码还是为传统的Objective-C,主要为了体现单例模式的思想,需要的朋友可以参考下

一、单例的作用
顾名思义,单例,即是在整个项目中,这个类的对象只能被初始化一次。它的这种特性,可以广泛应用于某些需要全局共享的资源中,比如管理类,引擎类,也可以通过单例来实现传值。UIApplication、NSUserDefaults等都是IOS中的系统单例。

二、单例模式的两种写法
1,常用写法

#import "LGManagerCenter.h"

static LGManagerCenter *managerCenter;

@implementation LGManagerCenter

+(LGManagerCenter *)sharedManager{
  if(!managerCenter)
    managerCenter=[[self allocWithZone:NULL] init];
  return managerCenter;
}

@end

2,用GCD创建单例类

#import "LGManagerCenter.h"


@implementation LGManagerCenter


+(LGManagerCenter *)sharedManager{
  static dispatch_once_t predicate;
  static LGManagerCenter * managerCenter;
  dispatch_once(&predicate, ^{
    managerCenter=[[LGManagerCenter alloc] init];
  });
  return managerCenter;
}

@end

其中dispatch_once函数只执行一次。

三、代码的优化
通过上面的方法,我们已经可以使用类方法来得到这个单例,但很多时候,项目的工程量很大,还有可能会很多开发者同时参与一个项目的开发,为了安全与管理代码的方便,也为了给不是这个单例的创作者但会用到这个单例的开发人员一些提示,我们通常会重写一些方法:

首先我们自己实现一个alloc方法:

+(instancetype)myAlloc{
  return [super allocWithZone:nil];
}

将我们的单例实现方法略作修改:

+(ZYHPayManager *)sharedMamager{
  static ZYHPayManager * manager;
  if (manager==nil) {
    manager=[[ZYHPayManager myAlloc]init];
  }
  return manager;
}

将一些视图实例化对象的方法重写:

+(instancetype)alloc{
  NSAssert(0, @"这是一个单例对象,请使用+(ZYHPayManager *)sharedMamager方法");
  return nil;
}
+(instancetype)allocWithZone:(struct _NSZone *)zone{
  return [self alloc];
}
-(id)copy{
  NSLog(@"这是一个单例对象,copy将不起任何作用");
  return self;
}
+(instancetype)new{
  return [self alloc];
}

注意:这里的alloc使用了断言,让任何视图通过alloc创建对象的程序段断在此处,给程序员提示。copy方法这里只是简单的返回了原对象,并未做任何处理,打印信息给程序员提示。

相关文章

  • Mac  Android Studio快捷键整理

    Mac Android Studio快捷键整理

    这篇文章主要介绍了Mac Android Studio快捷键的相关资料,这里整理了所有能用的快捷键,提供工作效率,需要的朋友可以参考下
    2016-10-10
  • iOS实现UIButton的拖拽功能

    iOS实现UIButton的拖拽功能

    这篇文章主要为大家详细介绍了iOS实现UIButton的拖拽功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-08-08
  • iOS开发之适配iOS10以及Xcode8

    iOS开发之适配iOS10以及Xcode8

    这篇文章主要为大家详细介绍了iOS开发之适配iOS10以及Xcode8的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-09-09
  • iOS自定义UIDatePicker日期选择器视图

    iOS自定义UIDatePicker日期选择器视图

    这篇文章主要为大家详细介绍了iOS自定义UIDatePicker日期选择器视图,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-04-04
  • iOS中程序异常Crash友好化处理详解

    iOS中程序异常Crash友好化处理详解

    在iOS开发调试过程中以及上线之后,程序经常会出现崩溃的问题,下面这篇文章主要给大家介绍了关于iOS中程序异常Crash友好化处理的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下
    2018-07-07
  • iOS实现的多条折线图封装实例

    iOS实现的多条折线图封装实例

    这篇文章主要跟大家分享了关于利用iOS实现多条折线图的封装实例,文中给出了详细的示例代码供大家参考学习,对大家具有一定的参考学习价值,需要的朋友们下面来一起看看吧。
    2017-07-07
  • iOS常用算法之两个有序数组合并(要求时间复杂度为0(n))

    iOS常用算法之两个有序数组合并(要求时间复杂度为0(n))

    这篇文章主要介绍了iOS常用算法之两个有序数组合并(要求时间复杂度为0(n)),实现思路是先将一个数组作为合并后的数组, 然后遍历第二个数组的每项元素,需要的朋友可以参考下
    2019-07-07
  • IOS缓存管理之YYCache使用详解

    IOS缓存管理之YYCache使用详解

    这篇文章主要介绍了IOS缓存管理之YYCache使用详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-09-09
  • 安装win10+黑苹果双系统零基础教程(图文)

    安装win10+黑苹果双系统零基础教程(图文)

    这篇文章主要介绍了安装win10+黑苹果双系统零基础教程(图文),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2020-01-01
  • 详解iOS 验证码输入的实现思路

    详解iOS 验证码输入的实现思路

    这篇文章主要介绍了iOS 验证码输入一种实现思路,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2018-10-10

最新评论