2013-05-16 53 views
1

所以,让我们说我有一个OBJ-C类数组作为财产,是这样的:Obj-C:将属性委托给一个实例变量?

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

所以,让我们假设,虽然我有items作为NSArray,我定义pushpop方法等使用临时可变数组,然后替换项目immutable数组,所以基本上我的items属性就像一个可变数组。现在,我们假设我希望能够获得实例中的项目数量。我知道我可以像一个方法,以便:

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

但是,有没有办法为我创造一个count属性,简单地委托给items财产呢?

如果可能的话,我感兴趣的是集合类行为就像在很多方面的阵列,所以我很乐意为计数是作为一个属性来访问像一个实例:

collection.count 

...而不是...

[collection getCount] 

......但我想不出如何做到这一点。

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

回答

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)但有在这种情况下无需这样做。

+0

这非常有帮助,谢谢! – Andrew