好吧,这可能是一个非常愚蠢的初学者问题,但是:
我有一个 ClassA,它将从 ClassB 创建一个子对象并将其分配给一个实例变量。详细说明:ClassA 将在指定的初始化程序中分配和初始化 ClassB,并将其分配给 childObject 实例变量。它的标题看起来像这样:
#import <Foundation/Foundation.h>
#import "ClassB.h"
@interface ClassA : NSObject {
ClassB *childObject;
}
@end
然后是ClassB的头部。 ClassB 必须引用 ClassA。
#import <Foundation/Foundation.h>
#import "ClassA.h"
@interface ClassB : NSObject {
ClassA *parentObject;
}
- (id)initWithClassA:(ClassA*)newParentObject;
@end
当 ClassA 对象从 ClassB 创建子对象时,ClassA 对象将调用 ClassB 对象的指定初始化器,其中它必须传递自身 (self)。
我觉得哪里不对劲,但现在我还不明白究竟是什么。我想我知道这是行不通的。他们不能相互导入。编译器只是告诉我:“错误:'ClassA' 之前的语法错误”。当我删除用于导入 ClassA 的导入语句时,删除 ClassA *parentObject 实例变量并删除指定初始值设定项(采用 ClassA 引用),然后它就可以工作了。
现在,这是我想要实现的(如果这很重要):我需要在 UIScrollView 中有一些非常特殊和复杂的行为。所以我决定将它子类化。因为主要部分将在委托(delegate)方法中完成,所以我决定为我的 UIScrollView 子类创建一个“通用”委托(delegate)对象。然后我的 UIScrollView 子类自动创建那个特殊的委托(delegate)对象并将其分配给它的委托(delegate)属性。委托(delegate)对象本身需要对其父对象(自定义的 UIScrollView)的引用,以便它可以访问该 ScrollView 的 subview 。但无论如何,即使有更好的方法来解决这个问题,我仍然想知道如何用两个需要彼此的“相互依赖”的对象来解决这个问题。
欢迎提出任何建议!
最佳答案
您不需要在头文件中导入这些类。在头文件中使用 @class
,然后仅在 .m 文件中使用#import:
// ClassA.h:
@class ClassB;
@interface ClassA : NSObject
{
ClassB *childObject;
}
@end
// ClassA.m:
#import "ClassA.h"
#import "ClassB.h"
@implementation ClassA
//..
@end
// ClassB.h
@class ClassA;
@interface ClassB : NSObject
{
ClassA *parentObject;
}
- (id)initWithClassA:(ClassA*)newParentObject;
@end
// ClassB.m:
#import "ClassB.h"
#import "ClassA.h"
@implementation ClassB
//..
@end
关于iphone - 我如何解决这个 Objective-C 类中双向依赖的问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/834955/