答:

     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, 而这个对象显然是非法的对象

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-12-31
  • 2021-09-20
  • 2022-12-23
猜你喜欢
  • 2022-12-23
  • 2021-09-27
  • 2021-12-30
  • 2022-12-23
  • 2022-01-09
  • 2022-12-23
  • 2021-07-16
相关资源
相似解决方案