1

今日は急ごしらえがあります。というクラスがあるとし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 メソッドを実装する必要さえありますか?

うまくいけば、これは理にかなっていますが、そうでない場合は、もう少しうまく説明しようとします. 読んでくれてありがとう!

4

0 に答える 0