码迷,mamicode.com
首页 > 其他好文 > 详细

self = [super init] 最终解释

时间:2014-08-21 11:21:44      阅读:167      评论:0      收藏:0      [点我收藏+]

标签:style   color   io   div   on   sp   ef   c   

答:

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

self = [super init] 最终解释,布布扣,bubuko.com

self = [super init] 最终解释

标签:style   color   io   div   on   sp   ef   c   

原文地址:http://www.cnblogs.com/geek6/p/3926518.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!