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, 而这个对象显然是非法的对象
  • 相关阅读:
    第03组 Beta冲刺(2/5)
    2019 SDN上机第6次作业
    第03组 Beta冲刺(1/5)
    2019 SDN上机第5次作业
    SDN课程阅读作业(2)
    2019 SDN上机第4次作业
    第05组 团队Git现场编程实战
    第05组 团队项目-需求分析报告
    团队项目-选题报告
    第07组 Alpha事后诸葛亮
  • 原文地址:https://www.cnblogs.com/geek6/p/3926518.html
Copyright © 2011-2022 走看看