如何将self作为方法参数传递?

时间:2010-11-18 09:52:15

标签: objective-c xcode

我需要将self传递给方法,我该怎么做?

我不知道自己是什么类型的对象?

我试过了:(id)dg

3 个答案:

答案 0 :(得分:7)

如果您在班级@implementation的{​​{1}}区域内,则Fooself。这意味着您可以将方法参数键入为Foo*Foo*(=任何对象,未完成类型检查):

id

答案 1 :(得分:3)

这对我来说似乎是对的。 (id)代表所有可能的对象。

以下是一些有用的代码:

@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

答案 2 :(得分:0)

该方法的签名是什么(换句话说,如何在界面中定义方法?)

或者你的意思是,你想在类B中定义一个方法,允许类A的实例调用该方法并将其自身作为参数之一传递?如果是这样,:( id)sender通常用作执行此操作的通用方法。例如,在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 
   }
}