Obj-C:将属性委托给实例变量?

时间:2013-05-16 01:25:14

标签: objective-c properties

所以,假设我有一个带有数组作为属性的Obj-C类,如下所示:

@interface Collection
@property (strong, nonatomic) NSArray *items;
@end

所以,我们假设当itemsNSArray时,我定义pushpop方法等使用临时可变数组然后替换items immutable数组,所以我的items属性就像一个可变数组。现在,假设我希望能够获得实例中的项目数。我知道我可以制作一个这样的方法:

- (NSUInteger)getCount
{
  return self.items.count;
}

但是,有没有办法让我创建一个简单地委托给count属性的items属性?

如果可能的话,我对Collection类在大多数情况下表现得像一个数组很感兴趣,所以我喜欢count作为一个实例上的属性来访问,如:

collection.count

......而不是......

[collection getCount]

......但我想不出怎么做。

如果那是不可能的,那么“正常的Obj-C方式”做这样的事情会是什么?

1 个答案:

答案 0 :(得分:3)

objective-c中的点表示法不限于使用@property语法声明的属性。如果您声明了方法- (NSUInteger)count;,则可以使用collection.count来调用它。但是这样做可能会让其他开发人员感到困惑。而是包括@property声明和实现自定义getter来定义所需的行为:

@property(readonly) NSUInteger count;

- (NSUInteger) count {
  ...
}

请参阅http://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/ProgrammingWithObjectiveC/EncapsulatingData/EncapsulatingData.html#//apple_ref/doc/uid/TP40011210-CH5-SW13

或者,您也可以指定要在属性声明中使用的getter方法(例如@property(readonly, getter=getCount),但在这种情况下无需这样做。