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, 而这个对象显然是非法的对象
  • 相关阅读:
    50道sql练习题和答案
    异步编程的数据同步
    浅说异步编程
    进程、应用程序域,线程和上下文之间的关系
    关于薪资和技术的一些思考
    SharePoint2013 列表栏设置
    SharePoint2013 功能区的配置
    EF Code First 数据迁移配置
    EF CodeFirst 数据库初始化策略
    用加减边距写图片轮播
  • 原文地址:https://www.cnblogs.com/geek6/p/3926518.html
Copyright © 2011-2022 走看看