目标C中的加号和减号在方法旁边意味着什么?
我在目标c和xcode中都很新。 我想知道方法定义旁边的+
和-
符号是什么意思。
- (void)loadPluginsAtPath:(NSString*)pluginPath errors:(NSArray **)errors;
+
用于类方法, -
用于实例方法。
例如
// 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".
还有一个问题涉及类和实例方法之间的区别 。
(+)类方法和( – )例如方法,
(+)类方法: –
被声明为静态的方法 该方法可以在不创build类的实例的情况下被调用。 类方法只能对类成员进行操作,而不能对实例成员进行操作,因为类方法不了解实例成员。 除非在类的实例上调用类,否则类的实例方法也不能从类方法中调用。
( – )实例方法: –
另一方面要求类的实例在可以被调用之前存在,所以需要使用new关键字创build一个类的实例。 实例方法对类的特定实例进行操作。 实例方法没有被声明为静态的。
+方法是类方法 – 也就是没有访问实例属性的方法。 用于像alloc或helper方法那样的方法,不需要访问实例variables
– 方法是实例方法 – 与一个对象的单个实例相关。 通常用于一个类的大多数方法。
请参阅语言规范了解更多详细信息。
在这里,在“方法和消息”部分中,对苹果的这个明确的解释是:
简单来说:
+表示“类方法”
(方法可以被调用,而不需要被实例化的类的实例)。 所以你这样称呼它:
[className classMethod];
– 意思是“实例方法”
你需要首先实例化一个对象,然后你可以调用对象的方法)。 你可以像这样手动实例化一个对象:
SomeClass* myInstance = [[SomeClass alloc] init];
(这基本上为对象分配内存空间,然后在这个空间中生成对象 – 这是一个过分简化的过程,而是一个很好的思考方式, 你可以单独地分配和初始化对象,但从不这样做 – 这会导致与指针有关的讨厌问题和内存pipe理)
然后调用实例方法:
[myInstance instanceMethod]
在Objective C中获取对象实例的另一种方法是这样的:
NSNumber *myNumber = [NSNumber numberWithInt:123];
它调用NSNumber类的'numberWithInt' 类方法 ,这是一个“工厂”方法(即为您提供一个对象的“现成实例”的方法)。
Objective C还允许直接使用特殊的语法来创build特定的对象实例,就像这样的string:
NSString * myStringInstance = @“abc”;
客观的C编程指南是很好的资源