gyu*_*isc 176 syntax objective-c method-declaration
我在目标c和xcode中都很新.我想知道方法定义旁边的符号+和-符号是什么意思.
- (void)loadPluginsAtPath:(NSString*)pluginPath errors:(NSArray **)errors;
Run Code Online (Sandbox Code Playgroud)
Geo*_*lly 222
+用于类方法,-用于实例方法.
例如
// 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".
Run Code Online (Sandbox Code Playgroud)
Van*_*hta 42
(+)用于类方法和( - )用于例如方法,
(+)类方法: -
是声明为静态的方法.可以在不创建类的实例的情况下调用该方法.类方法只能在类成员上操作,而不能在实例成员上操作,因为类方法不知道实例成员.除非在该类的实例上调用类,否则也不能从类方法中调用类的实例方法.
( - )实例方法: -
另一方面,在调用类之前需要该类的实例存在,因此需要使用new关键字创建类的实例.实例方法对特定的类实例进行操作.实例方法未声明为静态.
苹果公司对此的明确解释是在"方法和消息"部分下面的:
简单来说:
(可以在没有实例化类的实例的情况下调用方法).所以你这样称呼它:
[className classMethod];
Run Code Online (Sandbox Code Playgroud)
您需要首先实例化一个对象,然后您可以调用该对象上的方法).您可以手动实例化这样的对象:
SomeClass* myInstance = [[SomeClass alloc] init];
Run Code Online (Sandbox Code Playgroud)
(这实际上是为对象分配内存空间然后初始化该空间中的对象 - 过度简化但是考虑它的好方法.你可以单独分配和初始化对象但从不这样做 - 它可能导致与指针相关的讨厌问题和内存管理)
然后调用实例方法:
[myInstance instanceMethod]
Run Code Online (Sandbox Code Playgroud)
在Objective C中获取对象实例的另一种方法是这样的:
NSNumber *myNumber = [NSNumber numberWithInt:123];
Run Code Online (Sandbox Code Playgroud)
它调用NSNumber类的'numberWithInt' 类方法,这是一个'工厂'方法(即为您提供对象的'现成实例'的方法).
Objective C还允许使用特殊语法直接创建某些对象实例,就像这样的字符串一样:
NSString*myStringInstance = @"abc";