黑马程序员技术交流社区

标题: 求教,重写init方法,[super init]失败是什么意思? [打印本页]

作者: yufang1993    时间: 2015-11-19 00:11
标题: 求教,重写init方法,[super init]失败是什么意思?

  1. #import "Person.h"

  2. @implementation Person

  3. //在保留父类原有方法中的所有操作的前题下,加上自已独有的操作.--->重写父类的init方法

  4. -(id)init{
  5.     /*
  6.     self= [super init];
  7.     //如果super init 没有执行成功或正确执行,则无法返回一个正确的对象,那么此时会返回0(nil);
  8.     //nil==0;
  9.     if(self!=nil){
  10.         _age=1;
  11.         _name=@"八戒";
  12.     }
  13.      */
  14.     //0为假,非0数都为真.假如super init失败了,则返回0,self=0;为假,不执行.
  15.     //如果super init执行成功了,会返回一个指针,那个值赋值给self=0x123abc(假设值);则,self是一个非0数,为真执行自定义属性赋值操作
  16.     //注意:下面是赋值.判断原理是:非0数为真,0为假.
  17.     if(self= [super init]){
  18.         _age=1;
  19.         _name=@"八戒";
  20.     }
  21.    
  22.     return self;
  23. }

  24. @end
复制代码


[super init]意为调用父类中init方法.初始化一个对象,初始化失败意为调用方法不成功,
问一:为什么会调用失败呢?
如果调用失败,[super init]返回nil ,nil相当于0,
问二:nil是啥意思?


作者: yanggangcl    时间: 2015-11-19 07:51
正如 0 表示数值上的“没有”,nil 表示对象指针上的 “没有”
作者: yufang1993    时间: 2015-11-19 08:56
yanggangcl 发表于 2015-11-19 07:51
正如 0 表示数值上的“没有”,nil 表示对象指针上的 “没有”

指针上的没有???空指针????野指针??????指针不存在????
作者: yanggangcl    时间: 2015-11-19 10:48
yufang1993 发表于 2015-11-19 08:56
指针上的没有???空指针????野指针??????指针不存在????

是空指针。野指针是指向了不该指的被回收的内存。不存在就无从谈指针了。
作者: yufang1993    时间: 2015-11-19 10:51
yanggangcl 发表于 2015-11-19 10:48
是空指针。野指针是指向了不该指的被回收的内存。不存在就无从谈指针了。 ...

恩恩,多谢
作者: tr2e    时间: 2015-11-19 11:00
nil为什么要赋值呢?
作者: wuxiaoling    时间: 2015-11-19 11:52
问题1,if( self = [super init] )这是一种通常的建议写法,赋值并测零只是为了防止超类在初始化过程中发生改变,返回了不同的对象。 这种状况极少,即使init改变了对象,新对象也不接受新添加的改变。
作者: wuxiaoling    时间: 2015-11-19 11:53
问题2,nil是说一个一个指针里面没有存放任何的地址
作者: 仰望星空的猪    时间: 2015-11-22 11:18
目测初始 化失败是因为你初始化了两次, 你删掉一次试试     nil是空对象。  




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2