2010-10-24 6 views
0

L'objectif est-il possible de définir un objet dans une méthode, appeler une méthode d'un autre objet, et cette méthode utiliser le premier objet:Utilisation des variables dans les méthodes en c

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

La méthode définie dans la classe. fichier m:

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

Que voulez-vous dire? Que sont 'value' et' someOtherValue'? – kennytm

+0

valeur serait la valeur d'origine de la variable et une autre valeur serait une nouvelle valeur qui serait affectée à l'instance. Voulez-vous dire quelles sont les valeurs spécifiques? – bubster

Répondre

1

la solution simple est de passer en tant que paramètre:

[instance method:self]; 
... 
- (void) method:(class *)caller { ... 

pour éviter le couplage des deux classes Cependant, ensemble, il est courant d'utiliser un protocole pour définir la sémantique du rappel et de séparer l'appel de méthode de la spécification du gestionnaire de rappel en affectant d'abord un délégué, puis en appelant des méthodes. C'est un peu impliqué, et j'espère avoir correctement couvert tous les détails.

// 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 
Questions connexes