zoukankan      html  css  js  c++  java
  • self = [super init] 最终解释

    答:

         init 中调用super的 init方法来初始化自己所包含有的父类信息
    1.内存分配
         内存应该在[Class alloc]的时候就已经分配了,大小和类型应该由对应的Class来决定。而init方法只是进行对象内部各种变量的初始化,同时将retain count加一,表示目前这块内存空间有人在用
     
         所以[super init]并不是说返回父类的地址,而是调用父类的初始化函数,同时返回地址指针,而这个指针在[Class alloc]时,已经产生。真正决定指针类型的是alloc,不是init
     
    2.指针指向
    -(id) init{
    .....
      return self;
    }
     
         这个self指针就是[SubClass alloc]分配的,指针所指对象的类型也是在这个时候确定的,后面再调用init里面的self包括super class里面的init都是这个指针
     
         [super init]并没有生成一个新的指针,所以不存在说把父类的指针赋给子类,那个指针本来就是指向子类的
     
    3.if判断的解释
    [super init] 从工程角度说, 存在初始化失败返回nil, 所以保险起见都是要做检测
     
    self = [super init];
    if(self){
       ...
    }
    return self;
     
    如果没有"self =", 即使父类初始化失败, 子类还是会返回不是nil的self, 而这个对象显然是非法的对象
  • 相关阅读:
    Win7。56个进程让我头疼
    bzoj2843极地旅行社
    bzoj2751[HAOI2012]容易题(easy)
    bzoj3442学习小组
    bzoj4423[AMPPZ2013]Bytehattan
    bzoj4591[Shoi2015]超能粒子炮·改
    bzoj2299[HAOI2011]向量
    bzoj3223Tyvj 1729 文艺平衡树
    bzoj2563阿狸和桃子的游戏
    bzoj3673可持久化并查集 by zky&&bzoj3674可持久化并查集加强版
  • 原文地址:https://www.cnblogs.com/geek6/p/3926518.html
Copyright © 2011-2022 走看看