繁体   English   中英

什么时候使用类扩展在.m文件中创建初始化方法?

[英]When do you create initialization methods in .m files using class extension?

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

突然间,这会弹出:

“...但是”创建主集合“任务是一项只有数据控制器对象需要知道的任务。因为这个方法不需要暴露给其他对象,所以你不需要在标题中声明它文件。”

事实证明,“。master collection”的初始化作为类扩展而不是头文件出现在.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
...

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

-

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM