2010-11-18 13 views
1

私はメソッドに自己を渡す必要がありますが、どうすればいいですか?する方法私はメソッドパラメータとして自己を渡す?

私はどのような種類の自己があるのですか?

私は(つまり、どのインタフェースで定義されたメソッドがある)メソッドのシグネチャは何:(id)dg

+0

'(ID)として指定することの結果は何'?どのようにメソッドを呼び出していますか? – BoltClock

+0

あなたは自分のクラスを知りませんか?同じクラスのコードではありませんか? * id *はおそらく* NSObject **のように動作するはずです。 – Eiko

+0

* db *よりもわかりやすい名前を使用したい場合があります。後であなたがバグを修正する必要があるときは、あなた自身に感謝するでしょう。 –

答えて

7

あなたはクラス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 
0

を試してみましたか?

つまり、クラス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 
    } 
} 
3

右私には思われること。 (id)はすべての可能なオブジェクトを表します。 selfFoo*で、

@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 
関連する問題