iOS开发--单例的制定 使用

作者: 爱吃鱼的小灰 | 来源:发表于2016-11-16 13:41 被阅读118次

单例的使用以及制定

  1. 我们先来了解何为单利:
    单例模式是一种常用的软件设计模式,通过单例模式可以保证系统中一个类只有一个实例而且该实例易于外界访问,从而方便对实例个数的控制并节约系统资源,如果希望系统中某个类的对象只能存在一个,单例模式是最好的解决方案。iOS中最常见的单例就是UIApplication。
  • 单利的应用场景:
    音频播放,背景音乐!硬件资源:加速器、[UIScreen mainScreen]
    sharedXX, mainXXX
  • 优点:可以阻止其他对象实例化单例对象的副本,从而确保所有对象都访问唯一实例
  • 缺点:单例对象一旦建立,对象指针是保存在静态区的,单例对象在堆中分配的内存空间,会在应用程序终止后才会被释放
  • 温馨提示:只有确实需要唯一使用的对象才需要考虑单例模式,不要滥用单例
  • 下边说下如何去创建一个单例:
    (1)重写allocWithZone,用dispatch_once实例化一个静态变量
    (2) 写一个+sharedXXX方便其他类调用 ,在iOS中,所有对象的内存空间的分配,最终都会调用allocWithZone方法,如果要做单例,需要重写此方法。
  • 下边是代码示例:
 + (id)allocWithZone:(struct _NSZone *)zone{  
// dispatch_once是线程安全onceToken默认为0  
    static sharedObj * instance;
   static dispatch_once_t onceToken;   
// dispatch_once宏可以保证块代码中的指令只被执行一次   
   dispatch_once(&onceToken, ^{      
// 在多线程环境下,永远只会被执行一次,instance只会被实例化一次        
  instance = [super allocWithZone:zone];   
 });     
  return instance;
}
  • 下边这个方法是在外部要调用的,所以要在.h文件做声明
 + (instancetype)sharedInstance{
 // 如果有两个线程同时实例化,很有可能创建出两个实例来  
  return [[self alloc] init];
}

相关文章

  • iOS开发 单例使用问题

    iOS开发 单例使用问题 iOS开发 单例使用问题

  • iOS开发 单例使用问题

    iOS开发 单例使用问题 iOS开发 单例使用问题

  • iOS开发--单例的制定 使用

    单例的使用以及制定 我们先来了解何为单利:单例模式是一种常用的软件设计模式,通过单例模式可以保证系统中一个类只有一...

  • iOS单例模式容错处理

    ios 单例模式容错处理 1、单例模式的使用和问题解决 在ios开发的过程中,使用单例模式的场景非常多。系统也有很...

  • @sychronized和dispatch_once,以及对单例

    在iOS开发中,经常使用到单例。单例是Cocoa中被广泛使用的设计模式之一。单例使得某个类在整个applicati...

  • iOS 单例模式 or NSUserDefaults

    本文内容:iOS的单例模式NSUserDefaults的使用总结:iOS单例模式 and NSUserDefaul...

  • 单例的宏定义

    序言 单例的使用在我们开发iOS程序的时候的使用率是非常高的,在我们写一个单例的时候,可能不止会用到一个单例,然而...

  • iOS单例模式

    单例模式是在iOS开发中常用的开发模式之一,使用单例模式是为了保证在整个程序中,所定义的属性值是唯一的 之前对于单...

  • 【浅析iOS中常用设计模式】

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

  • iOS-两种单例模式的实现

    单例模式是开发中最常用的写法之一,创建一个单例很多办法,iOS的单例模式有两种官方写法,如下: 不使用GCD 某些...

网友评论

    本文标题:iOS开发--单例的制定 使用

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