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

在Objective-C中,我想知道方法定义旁边的+-符号是什么意思。

- (void)loadPluginsAtPath:(NSString*)pluginPath errors:(NSArray **)errors;
70347 次浏览

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

例如:

// 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".

另一个问题是关于类和实例方法之间的区别。

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

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

有关详细信息,请参阅语言规范

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

(+)类方法:-

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

(-)实例方法:-

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

如何创造?

@interface CustomClass : NSObject


+ (void)classMethod;
- (void)instanceMethod;


@end

如何使用?

[CustomClass classMethod];


CustomClass *classObject = [[CustomClass alloc] init];
[classObject instanceMethod];

苹果公司对此的权威解释如下,在“方法和消息传递”部分:

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]

在Objective C中获取对象实例的另一种方法是:

NSNumber *myNumber = [NSNumber numberWithInt:123];

它调用NSNumber类的“ NumberWithInt ”类方法,这是一个“工厂”方法(即为您提供对象的“现成实例”的方法)。

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

NSString*MyStringInstance=@“ ABC ”;