私はObjective 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".
クラスメソッドとインスタンスメソッドの違いを扱う別の質問 があります。
(+)クラスメソッドの場合、(-)インスタンスメソッドの場合、
(+)クラスメソッド:-
静的として宣言されているメソッドです。このメソッドは、クラスのインスタンスを作成せずに呼び出すことができます。クラスメソッドはインスタンスメンバーを認識しないため、クラスメソッドはインスタンスメンバーではなくクラスメンバーでのみ動作できます。クラスのインスタンスメソッドは、そのクラスのインスタンスで呼び出されない限り、クラスメソッド内から呼び出すこともできません。
(-)インスタンスメソッド:-
一方、クラスのインスタンスは、呼び出される前に存在する必要があるため、newキーワードを使用してクラスのインスタンスを作成する必要があります。インスタンスメソッドは、クラスの特定のインスタンスで動作します。インスタンスメソッドは静的として宣言されていません。
作成方法
@interface CustomClass : NSObject
+ (void)classMethod;
- (void)instanceMethod;
@end
使い方?
[CustomClass classMethod];
CustomClass *classObject = [[CustomClass alloc] init];
[classObject instanceMethod];
+メソッドはクラスメソッドです。つまり、インスタンスプロパティにアクセスできないメソッドです。インスタンス変数へのアクセスを必要としないクラスのallocまたはヘルパーメソッドなどのメソッドに使用されます
-メソッドはインスタンスメソッドです-オブジェクトの単一インスタンスに関連しています。通常、クラスのほとんどのメソッドに使用されます。
詳細については、 言語仕様 を参照してください。
Appleからのこれに関する明確な説明は、「メソッドとメッセージング」セクションの下にあります。
簡単に言うと:
(インスタンス化されるクラスのインスタンスなしでメソッドを呼び出すことができます)。したがって、次のように呼び出します。
[className classMethod];
最初にオブジェクトをインスタンス化する必要があります。その後、オブジェクトでメソッドを呼び出すことができます。次のようにオブジェクトを手動でインスタンス化できます。
SomeClass* myInstance = [[SomeClass alloc] init];
(これは基本的にオブジェクトにメモリ空間を割り当て、その空間でオブジェクトを初期化します-単純化しすぎますが、それについて考えるのに良い方法です。オブジェクトを個別に割り当てて初期化できますが、これを行う-ポインターとメモリ管理に関連する厄介な問題につながる可能性があります)
次に、インスタンスメソッドを呼び出します。
[myInstance instanceMethod]
Objective Cでオブジェクトのインスタンスを取得する別の方法は次のとおりです。
NSNumber *myNumber = [NSNumber numberWithInt:123];
nSNumberクラスの 'numberWithInt' class methodを呼び出しています。これは、「ファクトリー」メソッド(つまり、オブジェクトの「既製インスタンス」を提供するメソッド)です。
Objective Cでは、次のような文字列の場合のように、特別な構文を使用して特定のオブジェクトインスタンスを直接作成することもできます。
NSString * myStringInstance = @ "abc";