-1

使用の違いは何ですか:

+ (id) myMethod;

// Rather than
- (id) myMethod;
4

3 に答える 3

1

宣言を使用する+と、メソッドがクラスメソッド、またはクラスオブジェクトであるクラスで直接呼び出すことができるメソッドとして宣言されます。だからあなたがこれを持っているとき:

@implementation Foo
+(NSString*)method1 {
  return @"Foo";
}
-(NSString*)method2 {
  return @"Foo";
}
@end

メソッドはさまざまな方法で呼び出されます。

[Foo method1];  //=> @"Foo"
Foo* f=[[Foo alloc] init];
[f method2];    //=> @"Foo"

もう1つ注意すべき点は、クラスメソッドはインスタンスにアクセスできないことです。つまり、どの種類のインスタンス変数にもアクセスできません。

于 2012-06-30T13:27:14.180 に答える
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
于 2012-07-01T03:19:19.367 に答える
0

一番上のものはクラス メソッドです (インスタンスは必要ありません) 2 番目のものはインスタンス変数です (特定のインスタンスにアタッチされています)。

この回答は、方法を非常によく説明しています:

Objective C のメソッド構文

[MyObject myMethod]; // did not have to create an instance

MyObject* myNewObject = [[MyObject alloc] init] autorelease];
[myNewObject myMethod]; // had to create an instance
于 2012-06-30T13:20:25.963 に答える