我有一个称为UIViewController
的FullScreenViewController
子类,该子类具有ImageScrollView
类型的属性,该属性是子类UIScrollView
对象的子类。实现和接口如下所示:
FullScreenViewController.h
#import <UIKit/UIKit.h>
@class ImageScrollView;
@interface FullScreenViewController : UIViewController
{
ImageScrollView *_scrollView;
}
@property(nonatomic, retain) ImageScrollView *scrollView;
@end
FullScreenViewController.m
#import "FullScreenViewController.h"
#import "ImageScrollView.h"
@implementation FullScreenViewController
@synthesize scrollView = _scrollView;
...
@end
现在,我继承了
FullScreenViewController
的子类,并且尝试访问ImageScrollView
属性的任何属性,并且不断收到错误消息:“找不到属性”。当我将ImageScrollView.h
添加到子类时,它可以工作,但是我不理解这一点。我已经在ImageScrollView.h
中添加了FullScreenViewController
,为什么还要再次添加呢?更新:我没有使用前向类声明,而是在FullScreenViewController.h中包含了ImageScrollView.h。关于为什么我曾经使用前向声明而不是仅包含.h文件,我有些困惑。
最佳答案
给定标题:
@interface FullScreenViewController : UIViewController
{
ImageScrollView *_scrollView;
}
@property(nonatomic, retain) ImageScrollView *scrollView;
@end
仅需要一个前向声明
@class ImageScrollView
。这告诉编译器有一个名为ImageScrollView
的objc类。当然,有了前向声明,除非需要在使用接口的地方也
#import
ImageScrollView,否则该接口在需要使用的位置不可见。现在,我将FullScreenViewController子类化,并且尝试从ImageScrollView属性访问任何属性,并且不断收到错误消息:“找不到属性”。当我将ImageScrollView.h添加到子类时,它可以工作,但是我不理解这一点。我已经在FullScreenViewController中添加了ImageScrollView.h,为什么还要再次添加它?
子类
ImageScrollView
不可见FullScreenViewControllerSubclass
的声明。 ImageScrollView.h
仅在#import
所在的位置可见。 FullScreenViewController.m
对FullScreenViewControllerSubclass.m
不可见。因此,必须在#import
中编写另一个FullScreenViewControllerSubclass.m
才能在此处使用ImageScrollView
。更新:我没有使用前向类声明,而是在FullScreenViewController.h中包含了ImageScrollView.h。关于为什么我曾经使用前向声明而不是仅包含.h文件,我有些困惑。
使用Forwards可以缩短构建时间并建立合理的受控依赖项结构。这是一个非常耗时的撤消问题。随着程序和库大小的增加,这个问题变得更加严重:
您是希望对中型项目中的标头进行更改,以要求重新编译50个源,每个翻译的平均预处理输入为150,000行,还是希望此更改影响6个源,平均预处理的输入为每个翻译40,000行? ?此处的区别在于,小的更改将使增量重建从几秒钟到几分钟才能完成,这取决于您对依赖项和导入的结构方式。
关于iphone - 在接口(interface)文件中:什么时候对自定义类使用前向声明,而不是仅包含其 header ?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10561578/