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

所属分类: 软件编程 / IOS 阅读数: 221
收藏 0 赞 0 分享

一、单例的作用
顾名思义,单例,即是在整个项目中,这个类的对象只能被初始化一次。它的这种特性,可以广泛应用于某些需要全局共享的资源中,比如管理类,引擎类,也可以通过单例来实现传值。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方法这里只是简单的返回了原对象,并未做任何处理,打印信息给程序员提示。

更多精彩内容其他人还在看

iOS UISearchController的使用方法

本文主要介绍了iOS UISearchController的使用方法,具有很好的参考价值,下面跟着小编一起来看下吧
收藏 0 赞 0 分享

IOS 中 new 和 alloc init 的对比

这篇文章主要介绍了IOS 中 new 和 alloc init 的区别的相关资料,需要的朋友可以参考下
收藏 0 赞 0 分享

IOS 字符串常用处理详细介绍

这篇文章主要介绍了IOS 字符串常用处理详细介绍的相关资料,需要的朋友可以参考下
收藏 0 赞 0 分享

iOS开发支付宝支付成功返回字符串的处理操作

很多朋友在做ios开发项目时,遇到支付宝支付成功返回字符串的处理操作不知道该怎么办,今天小编给大家分享实例代码,需要的朋友参考下
收藏 0 赞 0 分享

IOS CoreLocation实现系统自带定位的方法

本篇文章主要介绍了IOS Core Location实现系统自带定位的方法,非常具有实用价值,需要的朋友可以参考下。
收藏 0 赞 0 分享

iOS之点击通知栏的通知进入程序的触发事件

本文主要介绍了iOS中点击通知栏的通知进入程序的触发事件的相关知识,具有很好的参考价值,下面跟着小编一起来看下吧
收藏 0 赞 0 分享

IOS  Swift基础之switch用法详解

这篇文章主要介绍了IOS Swift基础之switch用法详解的相关资料,需要的朋友可以参考下
收藏 0 赞 0 分享

IOS React等Title不显示问题解决办法

这篇文章主要介绍了IOS React等Title不显示问题解决办法的相关资料,需要的朋友可以参考下
收藏 0 赞 0 分享

iOS UIScrollView滚动视图/无限循环滚动/自动滚动的实例代码

这篇文章主要介绍了iOS UIScrollView滚动视图/无限循环滚动/自动滚动,需要的朋友可以参考下
收藏 0 赞 0 分享

简单实现iOS指纹解锁(TouchID)

这篇文章主要介绍了如何简单实现iOS指纹解锁,验证TouchID,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享
查看更多