Простое решение состоит в том, чтобы передать его как параметр:
[instance method:self];
...
- (void) method:(class *)caller { ...
Однако, чтобы избежать слишком тесного соединения двух классов, обычно используется протокол для определения семантики обратного вызова.и отделить вызов метода от спецификации обработчика обратного вызова, сначала назначив делегат, а затем вызвав методы.Это немного запутанно, и я надеюсь, что я правильно раскрыл все детали.
// Foo.h
@class Foo;
@protocol FooDelegate
- (void)doSomethingWithFoo:(Foo*)caller;
@end
@interface Foo {
id<FooDelegate> delegate;
}
@property (nonatomic, retain) id<FooDelegate> delegate;
- (void)method;
@end
// Foo.m
@implementation Foo
@synthesize delegate;
- (void)method {
[delegate doSomethingWithFoo:self];
}
@end
// Bar.h
#import "Foo.h"
@interface Bar<FooDelegate> {
}
// Bar.m
@implementation Bar
- (IBAction)method {
Foo *foo = [[Foo alloc] init...];
foo.delegate = self;
[foo method];
}
- (void)doSomethingWithFoo:(Foo*)caller {
NSLog(@"Callback from %@", caller);
}
@end