我需要将self传递给方法,我该怎么做?
我不知道自己是什么类型的对象?
我试过了:(id)dg
答案 0 :(得分:7)
如果您在班级@implementation
的{{1}}区域内,则Foo
为self
。这意味着您可以将方法参数键入为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
}
}