3

我正在阅读 Apple 的教程之一(您的第二个 iOS 应用程序)。基本上,您有一个主数据类和一个数据控制器类。控制器类通过创建包含它们的数组来操作主要数据对象。

突然出现这个:

“...但是“创建主集合”任务是只有数据控制器对象需要知道的任务。由于此方法不需要暴露给其他对象,因此您无需在标头中声明文件。”

事实证明,“主集合”的初始化作为类扩展而不是头文件出现在 .m 文件中。我们为什么要这样做?直接在头文件中声明初始化方法有什么问题?

数据控制器的头文件:

#import <Foundation/Foundation.h>

@class BirdSighting;
@interface BirdsSightingDataController : NSObject

@property (nonatomic, copy) NSMutableArray *masterBirdSightingList;
- (NSUInteger)countOfList;
- (BirdSighting *)objectInListAtIndex:(NSUInteger)theIndex;
- (void)addBirdSightingWithName:(NSString *)inputBirdName location:(NSString *)inputLocation;

@end

这是相应的 .m 文件:

#import "BirdsSightingDataController.h"
#import "BirdSighting.h"

@interface BirdsSightingDataController ()

- (void)initializeDefaultDataList; //class extension

@end

@implementation BirdsSightingDataController
...
4

1 回答 1

2

将方法放在 .m 文件内部的接口中是制作方法的正确方法hidden

-

在头文件中声明这个方法并没有什么“错误”。如果你愿意,你可以这样做。

但是,如果不需要公开方法,最好使用私有标头扩展来隐藏实现文件中的方法。这意味着如果没有其他类需要调用此方法,或者如果没有其他程序员需要调用此方法,那么最好将方法保持为私有或隐藏。

像这样的案例将有助于解释这种情况:

首先,将方法放在 .m 文件中的隐藏接口扩展名中是一个有意识的决定。作为另一位开发人员,如果我在查看您的代码并看到您有意识地决定在您的实现文件中的隐藏接口()中放置一个方法,我会知道该方法仅在此类中使用......并且你是故意这样做的。

此外,这是一种很好的做法,因为如果您正在开发一个将被其他人使用的 API,或者与其他开发人员使用相同的代码库,它会限制他们调用类本身之外的特定方法的能力。这意味着,他们不会意外地从另一个对象调用该方法。

于 2012-04-22T21:50:30.343 回答