我今天快点了。假设我有一个名为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方法吗?
希望这是有道理的,但如果没有,我会尝试更好地解释它。谢谢你的阅读!