A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始


  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是啥意思?

8 个回复

倒序浏览
正如 0 表示数值上的“没有”,nil 表示对象指针上的 “没有”
回复 使用道具 举报
yanggangcl 发表于 2015-11-19 07:51
正如 0 表示数值上的“没有”,nil 表示对象指针上的 “没有”

指针上的没有???空指针????野指针??????指针不存在????
回复 使用道具 举报
yufang1993 发表于 2015-11-19 08:56
指针上的没有???空指针????野指针??????指针不存在????

是空指针。野指针是指向了不该指的被回收的内存。不存在就无从谈指针了。
回复 使用道具 举报
yanggangcl 发表于 2015-11-19 10:48
是空指针。野指针是指向了不该指的被回收的内存。不存在就无从谈指针了。 ...

恩恩,多谢
回复 使用道具 举报
nil为什么要赋值呢?
回复 使用道具 举报
问题1,if( self = [super init] )这是一种通常的建议写法,赋值并测零只是为了防止超类在初始化过程中发生改变,返回了不同的对象。 这种状况极少,即使init改变了对象,新对象也不接受新添加的改变。
回复 使用道具 举报
问题2,nil是说一个一个指针里面没有存放任何的地址
回复 使用道具 举报
目测初始 化失败是因为你初始化了两次, 你删掉一次试试     nil是空对象。  
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马