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, 而这个对象显然是非法的对象
  • 相关阅读:
    rpm包的管理
    多态应用实例--制作饮品
    纯虚函数和抽象类
    rpm包的管理
    动态监控进程
    封装继承和多态
    计网面试题
    模拟浏览器加载页面时的版本下载
    xpath中extract()使用
    MVC+EF CODE FIRST的使用
  • 原文地址:https://www.cnblogs.com/geek6/p/3926518.html
Copyright © 2011-2022 走看看