计数是 属性 还是不是?

Is count a property or not?

在 objective c 的官方 google 风格指南中提到

Dot notation is idiomatic style for Objective-C 2.0. It may be used when doing simple operations to get and set a @property of an object, but should not be used to invoke other object behavior.

以下是 getting/setting 属性的首选方式,而不是使用方括号:

NSString *oldName = myObject.name;
myObject.name = @"Alice";

以下是执行相同操作的非首选方法:

NSArray *array = [[NSArray arrayWithObject:@"hello"] retain];
NSUInteger numberOfItems = array.count;  // not a property
array.release;                           // not a property

但是,根据风格指南,count 不是 属性,因此应该使用括号表示法。不过算起来还真是个属性。任何人都可以权衡一下吗?

如果您参考 NSArray 的文档,您会看到计数绝对是 属性

https://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Classes/NSArray_Class/#//apple_ref/occ/instp/NSArray/count

听起来风格指南有误。正如您所说,点符号是 属性 访问器的首选——但对于 getter 更是如此。 array.count 正确。

然而,犯错是有道理的,因为在其他语言中,计数通常不会存储为 属性,您需要调用一个方法来检索计数。 NSArray 很特别:)