是否可以使用no-args方法的属性语法?

时间:2011-09-01 08:36:12

标签: objective-c syntax properties

让我们说一个类有一个普通的no-args方法,声明如下:

- (NSString *)responseString;

有两种方法可以调用此方法。使用

string = [instance responseString];

或者,使用点语法,如下所示:

string = instance.responseString;

首选方式是什么?有什么理由可以避免上一种方法吗?


更新 responseString 类的属性,但它未使用@property声明。根据定义,它是一种存取方法(getter)。生成的代码完全相同。

(我们在这里假设objc v2.0 +。)

3 个答案:

答案 0 :(得分:4)

我首选的方法是使用前者,因为我认为点符号是一种可能永远不会被添加到语言中的憎恶。

暂时搁置我的(合理的)偏见,你应该只使用点符号表示概念属性的东西(即他们不一定要使用@property来声明它们应该是对象的属性而不是对象执行的操作。在这种情况下,方法的名称是名词,因此-responseString可能是属性,并且可以使用点表示法。

使用点表示法不合适的一个例子是NSMutableArray的{​​{1}}方法。

注意:无论您是否使用点表示法,最好始终使用-removeAllObjects来声明属于概念属性的内容。

答案 1 :(得分:1)

这是一个态度问题,但我首选的方法是对所有不需要混音的属性使用点符号。

•使用有意义的点语法(仅限属性)

•不需要混合时尽可能经常使用

混合的例子:

NSString *description = [array objectAtIndex:i].description; // Use [[array objectAtIndex:i] description] instead

答案 2 :(得分:1)

避免使用这种类型的Dot语法的第一个也是最重要的原因是 强烈建议不要使用Apple本身 ,如果使用的话可能会导致崩溃或意外结果错误。

仔细阅读"Dot Syntax"中的“错误使用点语法”部分(来自Apple的文档)。列出了强烈不鼓励使用Dot Syntax的不同用法。

它明确指出,“强烈建议不要使用这些代码模式,因为它们不符合点语法的预期用途,即调用访问器方法。”