What do the plus and minus signs mean in Objective C next to a method?
在目标C和Xcode中,我是个新手。我想知道方法定义旁边的
1 | - (void)loadPluginsAtPath:(NSString*)pluginPath errors:(NSArray **)errors; |
例如。
1 2 3 4 5 6 7 8 9 10 11 12 13 | // 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". |
还有一个问题是处理类和实例方法之间的区别。
(+) for class methods and (-) for instance method,
(+)类方法:
是声明为静态的方法。可以在不创建类实例的情况下调用该方法。类方法只能在类成员上操作,不能在实例成员上操作,因为类方法不知道实例成员。类的实例方法也不能从类方法内调用,除非正在该类的实例上调用它们。
(-)实例方法:
另一方面,在调用类之前需要类的实例存在,因此需要使用new关键字创建类的实例。实例方法对类的特定实例进行操作。实例方法未声明为静态。
How to create?
1 2 3 4 5 6 | @interface CustomClass : NSObject + (void)classMethod; - (void)instanceMethod; @end |
How to use?
1 2 3 4 | [CustomClass classMethod]; CustomClass *classObject = [[CustomClass alloc] init]; [classObject instanceMethod]; |
+方法是类方法——也就是说,不能访问实例属性的方法。用于不需要访问实例变量的类的alloc或helper方法
-方法是实例方法-与对象的单个实例相关。通常用于类上的大多数方法。
有关详细信息,请参阅语言规范。
苹果对此的明确解释如下:"方法和信息"部分:
https://developer.apple.com/library/mac/referencelibrary/gettingstarted/roadmaposx/books/writeobjective-ccode/writeobjective-ccode/writeobjective-ccode.html
简言之:
+表示"类方法"(可以在不实例化类的实例的情况下调用方法)。所以你这样称呼它:
1 | [className classMethod]; |
< BR>
-表示"实例方法"您需要先实例化一个对象,然后才能调用该对象上的方法)。您可以手动实例化这样的对象:
1 | SomeClass* myInstance = [[SomeClass alloc] init]; |
(这实质上是为对象分配内存空间,然后在该空间中初始化对象——这是一种过于简单化但很好的思考方法。您可以单独分配和初始化对象,但永远不要这样做-这会导致与指针和内存管理相关的严重问题)
然后调用实例方法:
1 | [myInstance instanceMethod] |
在目标C中获取对象实例的另一种方法如下:
1 | NSNumber *myNumber = [NSNumber numberWithInt:123]; |
它调用nsnumber类的"numberWithint"类方法,这是一个"工厂"方法(即为您提供对象的"现成实例"的方法)。
目标C还允许直接使用特殊语法创建某些对象实例,例如,对于这样的字符串:
nsstring*myStringInstance=@"abc";