• iOS单例详解


    单例:整个程序只创建一次,全局共用。

    1. 单例的创建
      // SharedPerson.h 文件中
      + (instancetype)share;
      // SharedPerson.m 文件中
      static SharedPerson *_person;
      + (instancetype)allocWithZone:(struct _NSZone *)zone{
          static dispatch_once_t predicate;
          dispatch_once(&predicate, ^{
              _person = [super allocWithZone:zone];
          });
          return _person;  
      }
      
      + (instancetype)share {
          static dispatch_once_t onceToken;
          dispatch_once(&onceToken, ^{
              _person = [[self alloc]init];
          });
          return _person;
      }
      - (id)copyWithZone:(NSZone *)zone { return _person; }
    2. 分析单例
      • static SharedPerson *_person : 利用static关键字来确保创建的单例对象_person只能在此类中可以访问到;将_person定义成全局变量为了确保其生命周期存在于整个程序中,期间不被销毁.
      • dispatch_once : 此函数确保_person对象在程序中只会创建一次,并且也保证了创建时的线程安全。
      • + (instancetype)share : 提供便捷的类方法来创建单例对象,强烈建议用此法创建对象。
      • + (instancetype)allocWithZone:(struct _NSZone *)zone : [SharedPerson alloc]分配对象内存时,实际会调此函数allocWithZone:(struct _NSZone *)zone,所以需要重写此方法来保证单例对象只会创建一次,而且是必须重写此方法,防止其他开发者直接用初始化方法来创建单例对象

      • - (id)copyWithZone:(NSZone *)zone : 此函数来保证单例对象可以copy再得到一个一模一样的对象。

    此文章为个人笔记,方便自己以及有需要的朋友查看,转载请注明出处!
  • 相关阅读:
    SharePoint网站迁移问题
    使用.NET框架自带的Json序列化类
    IL:Hello World
    Javascript面向对象
    抽象代数学习记录
    关于集成测试
    用QTP脚本操作腾讯QQ好友买卖功能
    关于白盒测试一些资料
    Developer小记
    架构设计
  • 原文地址:https://www.cnblogs.com/shpyoucan/p/5985553.html
Copyright © 2020-2023  润新知