Использование переменных в методах в цели c - PullRequest
0 голосов
/ 24 октября 2010

Есть ли способ определить объект в методе, вызвать метод другого объекта и в этом методе использовать первый объект:

-(IBAction)method{
    class * instance = [[class alloc] initWithValue:value];
    [instance method];
}

Метод, определенный в файле class.m:

-(void) method {
    instance.value = someOtherValue;
}

1 Ответ

1 голос
/ 24 октября 2010

Простое решение состоит в том, чтобы передать его как параметр:

[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
...