私はメソッドに自己を渡す必要がありますが、どうすればいいですか?する方法私はメソッドパラメータとして自己を渡す?
私はどのような種類の自己があるのですか?
私は(つまり、どのインタフェースで定義されたメソッドがある)メソッドのシグネチャは何:(id)dg
私はメソッドに自己を渡す必要がありますが、どうすればいいですか?する方法私はメソッドパラメータとして自己を渡す?
私はどのような種類の自己があるのですか?
私は(つまり、どのインタフェースで定義されたメソッドがある)メソッドのシグネチャは何:(id)dg
あなたはクラスFoo
ため@implementation
ブロックの内側にある場合:
Foo*
または
id
(=任意のオブジェクト、行わチェックなしタイプ)としてメソッドパラメータを入力できることを意味します
@class Foo, SomeCollaborator;
@interface SomeCollaborator
- (void) doSomethingWithMe: (Foo*) myself;
- (void) doSomethingWithMe2: (id) myself;
@end
@implementation Foo
- (void) someFooMethod {
[someCollaborator doSomethingWithMe:self];
}
@end
を試してみましたか?
つまり、クラスBのメソッドを定義して、クラスAのインスタンスがそのメソッドを呼び出し、それ自体をパラメータの1つとして渡せるようにしたいのですか?もしそうなら、:(id)送信者はそれを行う一般的な方法としてよく使われます。たとえば、NSWindowの、そのメソッドの実装内で
- (void)makeKeyAndOrderFront:(id)sender;
- (void)orderFront:(id)sender;
- (void)orderBack:(id)sender;
に、あなたは何をすべきかを判断するために、このような何かを行うことができます。
- (void)makeKeyAndOrderFront:(id)sender {
if ([sender isKindOfClass:[NSWindowController class]]) {
// do something
} else if ([sender isKindOfClass:[MyCoolClass class]]) {
// do something
} else if ([sender respondsToSelector:@selector(whyDidYouOrderMeFront)]) {
// do something
} else if ([sender conformsToProtocol:@protocol(someCoolProtocol)]) {
// do something
} else {
// do something
}
}
右私には思われること。 (id)はすべての可能なオブジェクトを表します。 self
がFoo*
で、
@implementation Inspector
- (void)printClassOf:(id)instance {
NSLog("instance is of class: %@", [instance class]);
}
@end
@implementation SomeClass
- (void)someMethod {
Inspector *myInstance = [[[Inspector alloc] init] autorelease];
[myInstance printClassOf:self];
}
@end
'(ID)として指定することの結果は何'?どのようにメソッドを呼び出していますか? – BoltClock
あなたは自分のクラスを知りませんか?同じクラスのコードではありませんか? * id *はおそらく* NSObject **のように動作するはずです。 – Eiko
* db *よりもわかりやすい名前を使用したい場合があります。後であなたがバグを修正する必要があるときは、あなた自身に感謝するでしょう。 –