代码之家  ›  专栏  ›  技术社区  ›  stuartloxton

目标C澄清;-/+和*var

  •  5
  • stuartloxton  · 技术社区  · 16 年前

    我正在自学客观C( Mac OS X的Cocoa编程 )不过,我还有两个问题没有在书中回答或定义。

    1. 定义类方法时,两者之间的区别是什么(假设在.h文件中):

      -(int)人口;

      +(int)人口;

    我现在看到的是 - 但是,方法要求首先分配和初始化类 + 可以静态调用,而不需要分配和初始化。例如(在另一类函数中)

    // Using -
    Earth *world = [[Earth alloc] init];
    int population = [world population];
    
    // Using +
    int population = [Earth population];
    

    如果这是正确的,我应该在什么时候使用静态方法,它们是否是这样做的任何缺点。

    1. 当在一个函数参数中定义一个var,或者在一个函数中定义一个实际的var时,使用*表示var将是一个对象吗?例如(同样在头文件中)。

      -(void)setpopulation:(nsnumber*)population;//使用*作为population是nsnumber

      -(void)setpopulation:(int)population;//population不是类,因此不需要*

    抱歉,如果我的任何术语在Objective-C领域(如静态方法等)没有意义,我是一个PHP和Ruby程序员。

    3 回复  |  直到 16 年前
        1
  •  21
  •   Jason Coco superfell    16 年前

    Objective-C方法声明中的-/+只表示该方法是类方法还是实例方法。例如,对于Objective-C,不能向实例发送声明为类方法的消息。例如:

    @interface MyObject : NSObject
    -(void)myInstanceMethod;
    +(void)myClassMethod;
    @end
    
    // ...
    
    MyObject* obj = [[MyObject alloc] init];
    
    [obj myInstanceMethod];      // this is okay
    [obj myClassMethod];         // this will fail
    [[obj class] myClassMethod]; // this is okay
    [MyObject myClassMethod];    // this is okay
    [MyObject myInstanceMethod]; // this will fail
    

    关于问题的第二部分,objective-c是C的一个严格的超集。它添加类,但它们实际上是C数据结构,其实现被objective-c运行时隐藏。因此,类总是表示为指针。在C语言中,*表示变量被声明为指向某个内存地址的指针。也可以在C中使用带有基元类型的指针,但Objective-C对象必须始终由指针引用。

    有很多很好的教程/介绍指向那里。我建议简单的谷歌C教程和指针学习更多。

        2
  •  0
  •   Arne Burmeister    16 年前

    +声明是一个类方法,不需要实例来调用它。构造函数/工厂方法必须是类方法。-在单个实例上声明了实例方法和操作。每个实例都有自己的独立状态(成员变量)。这是OO编程的基本区别!通常,使大多数方法成为实例方法,实用程序类除外。

        3
  •  0
  •   Community CDub    7 年前

    您可以看到关于何时在中使用静态方法的一些讨论 When should I write Static Methods?