让我们说一个类有一个普通的no-args方法,声明如下:
- (NSString *)responseString;
有两种方法可以调用此方法。使用
string = [instance responseString];
或者,使用点语法,如下所示:
string = instance.responseString;
首选方式是什么?有什么理由可以避免上一种方法吗?
更新
responseString
是类的属性,但它未使用@property声明。根据定义,它是一种存取方法(getter)。生成的代码完全相同。
(我们在这里假设objc v2.0 +。)
答案 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的不同用法。
它明确指出,“强烈建议不要使用这些代码模式,因为它们不符合点语法的预期用途,即调用访问器方法。”