193

+Objective-C で、メソッド定義の横にあると-記号が何を意味するのか知りたいです。

- (void)loadPluginsAtPath:(NSString*)pluginPath errors:(NSArray **)errors;
4

4 に答える 4

237

+クラスメソッド-用であり、インスタンスメソッド用です。

例えば

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

クラスメソッドとインスタンスメソッドの違いを扱う別の質問があります。

于 2010-01-19T21:39:02.813 に答える
49

(+) クラス メソッドの場合、(-) インスタンス メソッドの場合、

(+) クラスメソッド:-

static として宣言されているメソッドです。クラスのインスタンスを作成せずにメソッドを呼び出すことができます。クラス メソッドはインスタンス メンバーを認識しないため、クラス メソッドはクラス メンバーに対してのみ操作でき、インスタンス メンバーに対しては操作できません。クラスのインスタンス メソッドは、そのクラスのインスタンスで呼び出されていない限り、クラス メソッド内から呼び出すこともできません。

(-) インスタンスメソッド:-

一方、呼び出す前にクラスのインスタンスが存在する必要があるため、 new キーワードを使用してクラスのインスタンスを作成する必要があります。インスタンス メソッドは、クラスの特定のインスタンスで動作します。インスタンス メソッドは static として宣言されていません。

作成方法は?

@interface CustomClass : NSObject

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

@end

使い方?

[CustomClass classMethod];

CustomClass *classObject = [[CustomClass alloc] init];
[classObject instanceMethod];
于 2013-08-02T11:06:33.147 に答える
19

+メソッドはクラスメソッドです。つまり、インスタンスのプロパティにアクセスできないメソッドです。インスタンス変数へのアクセスを必要としないクラスのallocまたはhelperメソッドなどのメソッドに使用されます

-メソッドはインスタンスメソッドです-オブジェクトの単一のインスタンスに関連します。通常、クラスのほとんどのメソッドに使用されます。

詳細については、言語仕様を参照してください。

于 2010-01-19T21:39:48.500 に答える
5

Apple からのこれに関する決定的な説明は、「方法とメッセージング」セクションの下にあります。

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」クラス メソッドを呼び出しています。これは、「ファクトリ」メソッド (つまり、オブジェクトの「既製のインスタンス」を提供するメソッド) です。

Objective C では、次のような文字列の場合のように、特別な構文を使用して特定のオブジェクト インスタンスを直接作成することもできます。

NSString *myStringInstance = @"abc";

于 2015-10-15T20:46:04.137 に答える