zoukankan      html  css  js  c++  java
  • 关于 objective

    [super init] 的结果可能有三种:
      第一种:  [super init] 初始化成功,这个是最最正常的情况。
      第二种:    [super init] 初始化失败,我们都知道oc的两步创建,alloc开辟内存空间,init初始化对象,但是init还有另外一个作用,在初始化失败的时候,init方法会返回一个nil。回头行文的最上面,如果self为nil,那么if(self)语句的内容,将不被执行,已确保程序健壮安全。
      - (instancetype)init
      {
          self = [super init]; // call the designated initializer
          if (self) {
            // Custom initialization
        }
          return self;
      }
      第三种:self = [super init]执行之后,内存指向了不相关的地址。这种情况的出现,一般是一下几种情况:单例、类簇、对象为NSNumber类型、父类在初始化的时候释放了当前对象,然后重新开辟了新的内存地址。

    为什么要使用 [super init]
    使用《禅与 Objective-C 编程艺术》的原话来回答:这样做,你看你会得到一个不能用的对象,并且它的行为是不可预测的,最终可能会导致你的 app 发生 crash。
    用通俗易懂的话回答:
    if( self = [super init] )这是一种通常的建议写法,赋值并测试nil只是为了防止超类在初始化过程中发生改变,返回了不同的对象。
  • 相关阅读:
    ACM-ICPC 2018 南京赛区网络预赛J. Sum
    ACM-ICPC 2018 南京赛区网络预赛 L. Magical Girl Haze(分层dijkstra)
    51nod1246 罐子和硬币
    UVALive
    CodeForces
    CodeForces
    hdu3861(tarjan缩点+最小路径覆盖)
    hdu1072(dfs和bfs)
    51nod1352 集合计数(扩展欧几里得)
    Cmder如何调整命令行字体大小
  • 原文地址:https://www.cnblogs.com/lomomiao/p/4995909.html
Copyright © 2011-2022 走看看