今日は急ごしらえがあります。というクラスがあるとしBSDHistoryManager
ます。History
これは、Web ブラウザー (別名オブジェクト [ 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
ご覧のとおり、ゲッターでアクセスしたときにコピーされる標準の可変コレクションが内部にあるため、内部が混乱することはありません。この時点で-addState:
、-removeState:
、 などの public アクセサー メソッドをいくつか追加したいと思います。たとえば、次のような独自のアクセサーを作成したいと思います。
- (void)addState:(BSDState *)state;
- (void)insertState:(BSDState *)state atIndex:(NSUInteger)index;
ただし、KVC メソッドも定義したいと考えています。ご存知のように、次のようになります。
- (void)addStatesObject:(id)object;
- (void)insertObject:(id)object inStatesAtIndex:(NSUInteger)index;
今では両方を持っています。それは素晴らしいことですが、読みやすく、理解しやすいように、クラスのインターフェイスをきれいに整えたいと考えています。私の質問は: KVC アクセサー パターンを実装する場合、これらのメソッドを宣言する必要がありますか、それともメソッドを実装するだけで「無料」で KVC 準拠を取得できますか? または、より良い質問は次のとおりです。独自のカスタム名のメソッドを作成する場合、KVC メソッドを実装する必要さえありますか?
うまくいけば、これは理にかなっていますが、そうでない場合は、もう少しうまく説明しようとします. 読んでくれてありがとう!