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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 胡铭 中级黑马   /  2014-5-5 10:34  /  1494 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

类方法中可以调用对象方法吗?调用的时候格式是怎样的?

评分

参与人数 1技术分 +1 收起 理由
jing迪 + 1

查看全部评分

3 个回复

倒序浏览
本帖最后由 zfan 于 2014-5-5 20:14 编辑

可以的,我记得在MJ老师的圆的方法那一集视频里有过应用,因为这里和java语言有区别,所以我印象比较深,java里面静态方法是不能调用非静态的方法的,但是OC语法里面似乎对这个比较“宽容”。并且在类方法调用这个对象方法时,已经建立了该对象方法所属的对象了,所以能够调用成功。
摘录部分代码如下:

  1. @implementation Point2D

  2. ...

  3. - (double)distanceWithOther:(Point2D *)other
  4. {
  5.   double xDelta = [self x] - [other x];
  6.   double xDeltaPF = pow(xDelta, 2);
  7.   double yDelta = [self y] - [other y];
  8.   double yDeltaPF = pow(yDelta, 2);
  9.   return sqrt(xDeltaPF + yDeltaPF);
  10. }
  11. + (double)distanceBetweenPoint1:(Point2D *)p1 andPoint2:(Point2D *)p2;      //此处类方法调用了上面的对象方法
  12. {
  13.   return [p2 distanceWithOther:p1];
  14. }

  15. ...

  16. @end
复制代码

评分

参与人数 1技术分 +1 收起 理由
jing迪 + 1

查看全部评分

回复 使用道具 举报
可以,不过需要把对象方法作为形参传进去
  1. //        人类方法的实现
  2. @implementation Person
  3. //        对象方法,打印自己的年龄
  4. -(void)test
  5. {
  6.         NSLog(@"My age is %d",_age);
  7. }
  8. //        类方法,但是需要传入一个Person创建出的对象
  9. +(void)testWithPerson:(Person *)p
  10. {
  11.         [p test];
  12. }
  13. @end
复制代码

这样就可以调用了

评分

参与人数 1技术分 +1 收起 理由
jing迪 + 1

查看全部评分

回复 使用道具 举报
可以啊!!!!!!!!!!!!!!!!!!!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马