代码之家  ›  专栏  ›  技术社区  ›  Aaron Maenpaa

在目标C中,方法旁边的加号和减号是什么意思?

  •  166
  • Aaron Maenpaa  · 技术社区  · 15 年前

    在目标C和Xcode中,我是个新手。我想知道 + - 方法定义旁边的符号表示。

    - (void)loadPluginsAtPath:(NSString*)pluginPath errors:(NSArray **)errors;
    
    4 回复  |  直到 8 年前
        1
  •  210
  •   Community Reversed Engineer    7 年前

    + 用于类方法和 - 用于实例方法。

    例如。

    // Not actually Apple's code.
    @interface NSArray : NSObject {
    }
    + (NSArray *)array;
    - (id)objectAtIndex:(NSUInteger)index;
    @end
    
    // somewhere else:
    
    id myArray = [NSArray array];         // see how the message is sent to NSArray?
    id obj = [myArray objectAtIndex:4];   // here the message is sent to myArray
    
    // Btw, in production code one uses "NSArray *myArray" instead of only "id".
    

    another question dealing with the difference between class and instance methods .

        2
  •  37
  •   Vandit Mehta    8 年前

    (+)表示类方法,(-)表示实例方法,

    (+)类方法:

    是声明为静态的方法。可以在不创建类实例的情况下调用该方法。类方法只能在类成员上操作,不能在实例成员上操作,因为类方法不知道实例成员。类的实例方法也不能从类方法内调用,除非正在该类的实例上调用它们。

    (-)实例方法:

    另一方面,在调用类之前需要类的实例存在,因此需要使用new关键字创建类的实例。实例方法对类的特定实例进行操作。实例方法未声明为静态。

        3
  •  17
  •   Robert Christie    15 年前

    +方法是类方法——也就是说,不能访问实例属性的方法。用于不需要访问实例变量的类的alloc或helper方法

    -方法是实例方法-与对象的单个实例相关。通常用于类上的大多数方法。

    Language Specification 更多细节。

        4
  •  5
  •   Chris Halcrow    9 年前

    苹果对此的明确解释如下:“方法和信息”部分:

    https://developer.apple.com/library/mac/referencelibrary/GettingStarted/RoadMapOSX/books/WriteObjective-CCode/WriteObjective-CCode/WriteObjective-CCode.html

    简言之:

    +表示“类方法”

    (可以在不实例化类的实例的情况下调用方法)。所以你这样称呼它:

    [className classMethod]; 
    


    -表示“实例方法”

    您需要先实例化一个对象,然后才能调用该对象上的方法)。您可以手动实例化这样的对象:

    SomeClass* myInstance = [[SomeClass alloc] init];
    

    (这实质上是为对象分配内存空间,然后在该空间中初始化对象——这是一种过于简单化但很好的思考方法。 可以单独分配和初始化对象,但是 千万不要这样做 -它会导致与指针和内存管理相关的严重问题)

    然后调用实例方法:

    [myInstance instanceMethod]
    

    在目标C中获取对象实例的另一种方法如下:

    NSNumber *myNumber = [NSNumber numberWithInt:123];
    

    它叫“数字Withint” 类方法 nsnumber类的,它是一个“工厂”方法(即为您提供对象的“现成实例”的方法)。

    目标C还允许直接使用特殊语法创建某些对象实例,例如,对于这样的字符串:

    nsstring*myStringInstance=@“abc”;