在Objective-C中声明集合访问器方法是必要的吗?

时间:2014-06-29 14:18:33

标签: objective-c macos collections accessor kvc

我今天快点了。假设我有一个名为BSDHistoryManager的班级。它是一个简单的状态历史记录器,就像在Web浏览器中一样(也就是History对象[window.history])。以下是.h / m文件的简化示例:

BSDHistoryManager.h

@interface BSDHistoryManager : NSObject

@property (nonatomic, copy) NSArray *states;

@end

BSDHistoryManager.m

@implementation BSDHistoryManager {
    NSMutableArray *_states;
}

- (NSArray *)states
{
    return _states.copy;
}

- (void)setStates:(NSArray *)states
{
    if ( [states isEqualToArray:_states] )
        return;
    _states = states.mutableCopy;
}

@end

正如你所看到的,我在内部有一个标准的可变集合,当用getter访问时会被复制,因此内部不会搞砸。此时,我想添加一些公共访问器方法,如-addState:-removeState:等。例如,我喜欢自己创建这样的访问器:

- (void)addState:(BSDState *)state;
- (void)insertState:(BSDState *)state atIndex:(NSUInteger)index;

但是,我也想定义KVC方法。你知道,那些看起来像这样:

- (void)addStatesObject:(id)object;
- (void)insertObject:(id)object inStatesAtIndex:(NSUInteger)index;

现在我有两个,这很酷,但我希望我的课程界面干净整洁,所以阅读和理解更容易。我的问题是:在实施KVC accessor patterns时,我是否需要声明这些方法,或者我是否获得KVC合规性#34;免费"通过实施方法?或者更好的问题是:如果我制作自己定制的KVC方法,我甚至需要实施KVC方法吗?

希望这是有道理的,但如果没有,我会尝试更好地解释它。谢谢你的阅读!

0 个答案:

没有答案