黑马程序员技术交流社区

标题: 求解答,怎样区分调用类方法和创建类的对象? [打印本页]

作者: bhr756052342    时间: 2014-9-25 00:41
标题: 求解答,怎样区分调用类方法和创建类的对象?
#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;
}


作者: AngleMGG    时间: 2014-9-25 01:15
类的对象的定义:Person *p = [Person new];
方法调用:类方法 :[Person printClassName];
                    对象方法:[p test];
创建对象,必定会有一个指针指向该Person对象,这个[Person printClassName]显然没有,那就肯定是调用方法了,类名是Person,直接用Person调用的方法肯定就是类方法了,区分类方法和对象方法那就看是类调用了方法还是创建的对象调用了方法。
作者: 崔石炫    时间: 2014-9-25 02:50
  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
有时候真的容易产生歧义,关键还是要多敲代码,很多时候我们看懂了视频,如果不自己敲代码的户话,真的只是过目就忘




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