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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

#import <Foundation/Foundation.h>
@interface Person : NSObject
{
    int age;
}
+ (void)printClassName;
- (void)test;
+ (void)test;
@end
@implementation Person
+ (void)printClassName
{
    NSLog(@"这个类叫做Person-%d", age);
}
- (void)test
{
    NSLog(@"111-%d", age);
   
}
+ (void)test
{   
    NSLog(@"333");
}
@end
int main()
{
    [Person *p = [Person new];
[Person printClassName];  
/* =====================================
我的问题是,上面两个[]。怎样区分上面是调用的类方法,还是用Person类创建的对象呢?
[Person printClassName];计算机是怎样判断不是有Person类创建的printClassName对象呢
    =====================================*/
    return 0;
}

3 个回复

倒序浏览
类的对象的定义:Person *p = [Person new];
方法调用:类方法 :[Person printClassName];
                    对象方法:[p test];
创建对象,必定会有一个指针指向该Person对象,这个[Person printClassName]显然没有,那就肯定是调用方法了,类名是Person,直接用Person调用的方法肯定就是类方法了,区分类方法和对象方法那就看是类调用了方法还是创建的对象调用了方法。
回复 使用道具 举报
  1. int main()
  2. {  
  3.         /* ====================================
  4.         首先要明白消息机制:
  5.         [消息接收者 消息];
  6.         意思就是  发送  消息  给  消息接收者,
  7.         执行结果就是,调用了消息接收者的方法
  8.     =====================================*/
  9.         Person *p = [Person new];        //Person是消息接收者,向Person发送了new消息,Person是类,所以这是调用类方法。返回值为Person类型的对象,赋值给p
  10.         [Person printClassName];        //向Person发送了printClassName消息,Person是类,所以这是类方法。

  11.         [p test];                                        //向p发送了test消息,p是对象,所以这是调用对象方法
  12.         [Person test];                                //向Person发送了test消息,Person是类,所以这是调用类方法

  13.         /*
  14.         关键在于区分消息接收者是类还是对象
  15.         消息接收者是类,那就是调用类方法
  16.         消息接收者是对象,那就是调用对象方法
  17.         */
  18.         return 0;
  19. }
复制代码
回复 使用道具 举报
songxing10000 来自手机 中级黑马 2014-9-25 08:56:53
板凳
有时候真的容易产生歧义,关键还是要多敲代码,很多时候我们看懂了视频,如果不自己敲代码的户话,真的只是过目就忘
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马