我有一个名为FullScreenViewController
的UIViewController
子类,它具有类型为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
添加到子类时,它可以工作,但我不明白这一点。我已经在FullScreenViewController
中添加了ImageScrollView.h
,为什么我必须再次添加它?
更新:我没有使用前向类声明,而是在 FullScreenViewController.h 中包含 ImageScrollView.h。我有点困惑为什么我曾经使用前向声明而不是只包含 .h 文件?
您需要添加它的原因是您在 FullScreenViewController.h 文件中只有一个@class声明。这仅声明 ImageScrollView* 类型的变量作为指向类 ImageScrollView 对象的指针。它不允许您访问 ImageScrollView 的属性。要访问特定于ImageScrollView的方法和属性,您需要包含ImageScrollView的@interface声明,我假设该声明位于ImageScrollView.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
不可见。因此,您必须FullScreenViewControllerSubclass.m
编写另一个#import
才能在那里使用ImageScrollView
。
更新:我没有使用前向类声明,而是在 FullScreenViewController.h 中包含 ImageScrollView.h。我有点困惑为什么我曾经使用前向声明而不是只包含 .h 文件?
使用转发实现快速构建时间和理智、受控的依赖关系结构。这是一个非常耗时的撤消问题。随着程序和库大小的增加,这个问题会变得更糟:
您是否希望对中型项目中的页眉进行更改,要求重新编译 50 个源,每次翻译的平均预处理输入为 150,000 行,或者您是否希望该更改影响 6 个源,每个翻译的平均预处理输入为 40,000 行?这里的区别在于,微小的更改需要从几秒钟到几分钟的增量重建才能完成,具体取决于您构建依赖项和导入的方式。
您是否尝试过使用别名_scrollView或scrollView访问它。您应该使用_scrollView访问它,并查看是否已将文件导入.m或.h,因为@class是不够的。