Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
是否需要在Objective-C中声明集合访问器方法?_Objective C_Macos_Collections_Accessor_Kvc - Fatal编程技术网

是否需要在Objective-C中声明集合访问器方法?

是否需要在Objective-C中声明集合访问器方法?,objective-c,macos,collections,accessor,kvc,Objective C,Macos,Collections,Accessor,Kvc,我今天有急事。假设我有一个名为BSDHistoryManager的类。它是一个简单的状态历史记录器,就像web浏览器中的历史对象[window.history]。以下是.h/m文件的简化示例: BSDHistoryManager.h BSDHistoryManager.m 正如您所看到的,我在内部有一个标准的可变集合,当使用getter访问时,它会被复制,这样内部就不会被弄乱。此时,我想添加一些公共访问器方法,如-addState:,-removeState:,等等。例如,我想创建自己的访问器,

我今天有急事。假设我有一个名为BSDHistoryManager的类。它是一个简单的状态历史记录器,就像web浏览器中的历史对象[window.history]。以下是.h/m文件的简化示例:

BSDHistoryManager.h

BSDHistoryManager.m

正如您所看到的,我在内部有一个标准的可变集合,当使用getter访问时,它会被复制,这样内部就不会被弄乱。此时,我想添加一些公共访问器方法,如-addState:,-removeState:,等等。例如,我想创建自己的访问器,如下所示:

- (void)addState:(BSDState *)state;
- (void)insertState:(BSDState *)state atIndex:(NSUInteger)index;
- (void)addStatesObject:(id)object;
- (void)insertObject:(id)object inStatesAtIndex:(NSUInteger)index;
但是,我也想定义KVC方法。你知道,那些看起来像这样的:

- (void)addState:(BSDState *)state;
- (void)insertState:(BSDState *)state atIndex:(NSUInteger)index;
- (void)addStatesObject:(id)object;
- (void)insertObject:(id)object inStatesAtIndex:(NSUInteger)index;
现在我两个都有了,这很酷,但我希望我的类界面友好干净,这样更容易阅读和理解。我的问题是:在实现时,我是否需要声明这些方法,还是仅仅通过实现这些方法就可以免费获得KVC遵从性?或者一个更好的问题是:如果我创建自己的自定义命名方法,我甚至需要实现KVC方法吗


希望这是有道理的,但如果不是,我会尽量解释得更好一点。谢谢你的阅读

KVC应该是免费的,但它们可能不是您可能错误地期望的。因为您的addStatesObject:和isertState:atIndex:示例不符合KVC模式。@HermannKlecker您是指-addState:方法吗?