Мне нужно передать себя в метод, как мне это сделать?Как я могу передать себя как параметр метода?
Я не знаю, какой тип объекта есть?
Я попытался :(id)dg
Мне нужно передать себя в метод, как мне это сделать?Как я могу передать себя как параметр метода?
Я не знаю, какой тип объекта есть?
Я попытался :(id)dg
Когда вы внутри @implementation
блока для класса Foo
, self
является Foo*
. Это означает, что вы можете ввести параметр метода как 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 вызвать этот метод и передать его как один из параметров? Если да, то: (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) представляет все возможные объекты.
Вот код, который работает:
@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
Что результат с указанием его как '(идентификатор)'? Как вы называете метод? – BoltClock
Почему ты не знаешь класс себя? Разве это не тот код в том же классе ?! * id * должен работать, как, вероятно, * NSObject **. – Eiko
Возможно, вы захотите использовать более описательные имена, чем * db *. Позднее вы поблагодарите себя, когда вам придется исправить ошибку. –