我已经下载了AA-plot图表的示例代码。

.H文件之一:

@interface MainViewController : UIViewController <APYahooDataPullerDelegate, CPPlotDataSource> {
    CPLayerHostingView *layerHost;
@private
    APYahooDataPuller *datapuller;
    CPXYGraph *graph;
}    
@property (nonatomic, retain) IBOutlet CPLayerHostingView *layerHost;
@end

在.m文件中,界面再次声明?

@interface MainViewController()

@property(nonatomic, retain) CPXYGraph *graph;
@property(nonatomic, retain) APYahooDataPuller *datapuller;

@end

我在示例项目的主视图控制器代码中找到了上述代码。

如果我执行以下操作, 上述代码和以下代码之间的区别是什么?

@interface MainViewController : UIViewController <APYahooDataPullerDelegate, CPPlotDataSource> {
    CPLayerHostingView *layerHost;
    APYahooDataPuller *datapuller;
    CPXYGraph *graph;
}    
@property (nonatomic, retain) IBOutlet CPLayerHostingView *layerHost;
@property(nonatomic, retain) CPXYGraph *graph;
@property(nonatomic, retain) APYahooDataPuller *datapuller;
@end
有帮助吗?

解决方案

您在.m文件中看到的“额外”内容是一个 类别. 。原始程序员可能只是想从他的班级的公共界面(在.H文件中)中隐藏他的一些实施细节,因此他做了一个类别(在这种情况下,无名 ())将它们添加到他的实现文件中。在这种特定情况下,他隐藏了私人变量的访问者,以使外部代码无法掌握。

您在第二个代码段中显示的更改将所有内容都放入单个类界面中。这些更改根本不应影响运行时操作。 (除了取出 @private, ,是故意的吗?)语义差异是类别方法在运行时添加到类中。

类别只能添加方法,而不是实例变量,这就是为什么原始代码在原始代码中具有所有实例变量声明(即使是具有“秘密”登录器的人) @interface 堵塞。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top