2010-11-18 2 views
1

Мне нужно передать себя в метод, как мне это сделать?Как я могу передать себя как параметр метода?

Я не знаю, какой тип объекта есть?

Я попытался :(id)dg

+0

Что результат с указанием его как '(идентификатор)'? Как вы называете метод? – BoltClock

+0

Почему ты не знаешь класс себя? Разве это не тот код в том же классе ?! * id * должен работать, как, вероятно, * NSObject **. – Eiko

+0

Возможно, вы захотите использовать более описательные имена, чем * db *. Позднее вы поблагодарите себя, когда вам придется исправить ошибку. –

ответ

7

Когда вы внутри @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 
0

Что такое сигнатура метода (другими словами, как это метод, определенный в интерфейсе)?

Или вы хотите определить метод в классе 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 
    } 
} 
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 
Смежные вопросы