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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 562413895@qq.co 中级黑马   /  2015-8-23 11:48  /  706 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

1、以 %@ 的格式打印对象时,其实是先调用对象的description方法,对象中若没有,重写父类的description方法,则调用父类的。
例://定义一个Dog类
       Dog  *d=[Dog  new];//定义Dog类的一个对象d
       //查看对象的地址
       NSLog(@"d=%p",d);//打印结果:d=0x1001002e0
      //打印Dog类的对象d
       NSLog(@"%@",d);//打印结果:<Dog : 0x1001002e0>,默认打印对象的地址
       //重写父类的description对象方法
       -(NSString  *)description{
           return @"junjun";
       }
       //继续打印Dog类的对象
       NSLog(@"%@",d);//打印结果:junjun,即调用了父类的description方法。
//或者重写父类的description类方法
       +(NSString  *)description{
           return @"junjun";
       }
       //继续打印Dog类的对象,[d class]表示这个类Dog
       NSLog(@"%@",[d class]);//打印结果:junjun,即调用了父类的description方法。
2、不要在description方法中同时使用%@和self,这样代表要调用self和description方法,最终会导致程序陷入死循环,循环调用description方法。
例:-(NSString  *)description{
              return  [NSString  stringWithFormat:@"%@",self];
          }//这样写是不对的










2 个回复

倒序浏览
问题不错。。。调用方法  要搞清楚 当前对象是谁。还有方法调用的时候子类没有就会找父类要。大概是这个意思吧?
回复 使用道具 举报
挺不错的!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马