使用の違いは何ですか:
+ (id) myMethod;
// Rather than
- (id) myMethod;
宣言を使用する+
と、メソッドがクラスメソッド、またはクラスがオブジェクトであるクラスで直接呼び出すことができるメソッドとして宣言されます。だからあなたがこれを持っているとき:
@implementation Foo
+(NSString*)method1 {
return @"Foo";
}
-(NSString*)method2 {
return @"Foo";
}
@end
メソッドはさまざまな方法で呼び出されます。
[Foo method1]; //=> @"Foo"
Foo* f=[[Foo alloc] init];
[f method2]; //=> @"Foo"
もう1つ注意すべき点は、クラスメソッドはインスタンスにアクセスできないことです。つまり、どの種類のインスタンス変数にもアクセスできません。
@Linuxios は、クラスとインスタンス メソッドの概念をほぼ要約しています。ただし、タイトルでゲッターとセッターについて言及したので、Objective-C では、独自のアクセサー メソッドを記述する代わりにプロパティを使用できることを指摘したいと思います。例えば、
ヘッダー ファイルには、次のようなものがあります。
@interface MyObject : NSObject
@property (nonatomic,retain) NSSet* mySet;
@end
m ファイルには、次のようなものがあります。
@implement MyObject
@synthesize mySet;
@end
別のクラスのセットにアクセスするには、次のようにします。
myObject.mySet; // assuming myObject is an instance of the MyObject class
一番上のものはクラス メソッドです (インスタンスは必要ありません) 2 番目のものはインスタンス変数です (特定のインスタンスにアタッチされています)。
この回答は、方法を非常によく説明しています:
[MyObject myMethod]; // did not have to create an instance
MyObject* myNewObject = [[MyObject alloc] init] autorelease];
[myNewObject myMethod]; // had to create an instance