UIApplication - 02模拟单例

  • 模仿UIApplication单例 - 实现过程, 要求如下:
    • 程序一启动就创建好了对象.
    • 只能获取对象,且获取的对象地址都是同一个!
    • 不能够进行alloc操作,当执行alloc时, 程序发生崩溃.

思路

  • 在哪里创建对象,程序一启动就会创建好呢?
    • 当类被加载到内存的时候,就会调用load方法。
      load 方法main 方法更早调用。
    • load方法中创建的对象,出了load方法,就销毁了。
      那么,怎么保存load方法中创建的对象呢 ?
      • 成员属性来保存,可以吗? ❌ 会报错
        • 语法 : 成员属性,不能在类方法访问
          + load是类方法,所以出现以下提示:

        • 错误提示: Instance variable '_per' accessed in class method
          成员属性,在类方法中被访问!

      • 用静态的变量来保存,load里面创建对象。✔️

  • 只能获取对象,且获取的对象地址都是相同得!
    static Person *_pers;
    + (instancetype)sharedPerson{
    return _pers;
    }
    

  • 不能够进行alloc操作,当执行alloc时, 程序发生崩溃.
    • 对象在load 方法的时候,就创建了。
    • 想让系统的alloc 方法失效,只需要重写下自己的alloc 方法即可。
      • 当对象有值时,直接抛出异常.
      • 没有值时,调用父类的alloc 方法,(原本系统的alloc 方法)
      + (instancetype)alloc{
      if(_pers){ -- 对象有值时
          -- 创建 NSException对象
         NSException *exception= [NSException exceptionWithName:@"NSInternalInconsistencyException" reason:@"There can only be one Person instance" userInfo:nil];
         -- 抛出异常
         [exception raise];
        }
      return [super alloc]; -- 调用系统的alloc方法
      }
      

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。