在2级中委派两次或在2级中相互调用功能

时间:2013-08-23 14:44:29

标签: objective-c function class delegates

基本上,我想把函数从一个类调用到另一个类。我知道我需要委托。 但是,例如,有A类和B类。我需要从类B调用A类中的函数,我还需要从类A调用类B中的函数。

因此,我需要像

一样导入
import "classA.h"  //to do in class B
import "classB.h"  //to do in class A

//then i may have delegate like this in both class
@protocol emailingroupViewControllerDelegate <NSObject>
-(void)updateGroupEmail :(NSString *)inputKey;
@end

问题是它不允许我在两个类之间导入这样的东西。我该怎么办?

1 个答案:

答案 0 :(得分:1)

您的标头中有一个依赖项循环。这很容易解决;不是在每个头中包含其他类的头文件,而是使用@class指令并在实现文件中包含头文件。

classA.h中,执行以下操作:

@class ClassB

@interface ClassA

...

@end

classA.m中,执行以下操作:

#import "classA.h"
#import "classB.h"

@implementation ClassA : NSObject

...

@end

classB.h中,执行以下操作:

@class ClassA

@interface ClassB

...

@end

最后,在classB.m中,执行以下操作:

#import "classB.h"
#import "classA.h"

@implementation ClassB : NSObject

...

@end

但是,如果您尝试使用委托模式,则您的委托应该实现协议而不是显式类。您应该在委托和在第三个类中使用它的对象之间建立连接。这将是ClassA的标题:

@protocol SomeDelegate <NSObject>

- (void)classA:(ClassA *)classA didSomethingWithAString:(NSString *)string;

@end

@interface ClassA : NSObject

@property (weak, nonatomic) id <SomeDelegate> delegate;

@end

然而,再一次,如果您要做的只是让ClassA调用ClassB中的一个函数,它可以调用ClassA中的函数,您可能需要重新检查您设计类的方式。 / p>