Tha*_*nks 4 iphone cocoa cocoa-touch objective-c uikit
好吧,这可能是一个非常愚蠢的初学者问题,但是:
我有一个ClassA,它将从ClassB创建一个子对象并将其分配给一个实例变量.详细说明:ClassA将在指定的初始化程序中分配和初始化ClassB,并将其分配给childObject实例变量.它的标题如下:
#import <Foundation/Foundation.h>
#import "ClassB.h"
@interface ClassA : NSObject {
ClassB *childObject;
}
@end
Run Code Online (Sandbox Code Playgroud)
然后,有ClassB的标题.ClassB必须引用ClassA.
#import <Foundation/Foundation.h>
#import "ClassA.h"
@interface ClassB : NSObject {
ClassA *parentObject;
}
- (id)initWithClassA:(ClassA*)newParentObject;
@end
Run Code Online (Sandbox Code Playgroud)
当ClassA对象从ClassB创建子对象时,ClassA对象将调用ClassB对象的指定初始化程序,它必须传递给自己(self).
我觉得有些不对劲,但是现在我还没有得到它的确切含义.有人认为我知道这不起作用.他们不能互相进口.编译器告诉我:"错误:'ClassA'之前的语法错误".当我删除导入语句以导入ClassA时,删除ClassA*parentObject实例变量并删除指定初始值设定项(需要ClassA引用),然后它可以工作.
现在,这是我想要实现的(如果这很重要):我需要在UIScrollView中有一些非常特殊和复杂的行为.所以我决定将其子类化.因为主要部分将在委托方法中完成,所以我决定为我的UIScrollView子类创建一个"泛型"委托对象.然后,我的UIScrollView子类自动创建该特殊委托对象并将其分配给其delegate属性.委托对象本身需要引用它的父级,即自定义的UIScrollView,以便它可以访问该滚动视图的子视图.但无论如何,即使有更好的方法来解决这个问题,我仍然想知道如何通过两个需要相互依赖的"相互依赖"对象来实现这一目标.
欢迎任何建议!
e.J*_*mes 15
您不需要在头文件中导入这些类.使用@class的头文件,然后只在.m文件使用#import:
// ClassA.h:
@class ClassB;
@interface ClassA : NSObject
{
ClassB *childObject;
}
@end
Run Code Online (Sandbox Code Playgroud)
// ClassA.m:
#import "ClassA.h"
#import "ClassB.h"
@implementation ClassA
//..
@end
Run Code Online (Sandbox Code Playgroud)
// ClassB.h
@class ClassA;
@interface ClassB : NSObject
{
ClassA *parentObject;
}
- (id)initWithClassA:(ClassA*)newParentObject;
@end
Run Code Online (Sandbox Code Playgroud)
// ClassB.m:
#import "ClassB.h"
#import "ClassA.h"
@implementation ClassB
//..
@end
Run Code Online (Sandbox Code Playgroud)
使用@class A;而@class B;不是#imports来告诉编译器不要担心类定义,只是继续前进,因为它稍后会遇到它们.
基本上,替换#import "A.h"为@class A;.
您需要做的是"转发声明"您的类而不是导入完整定义.例如:
#import <Foundation/Foundation.h>
@class ClassB; // Tell the compiler that ClassB exists
@interface ClassA : NSObject {
ClassB *childObject;
}
@end
Run Code Online (Sandbox Code Playgroud)
你为ClassB头文件做了类似的事情.
| 归档时间: |
|
| 查看次数: |
977 次 |
| 最近记录: |