点运算符访问类方法

时间:2014-01-24 08:52:33

标签: ios class-method nsmutablestring

这个问题与知道我们不知道的事情有关。我正在研究“为什么人们不使用这个”?这背后有什么理由与具体技术有关吗?因此,请仔细阅读并给予正确的回答。

我们可以写

NSMutableString *string = NSMutableString.string;

而不是

NSMutableString *string = [NSMutableString string];

与我们如何编写此方法相同,

NSMutableString *string = [NSMutableString stringWithString:@"test"];

更新:

这个问题不是重复,有点不同。我接受以下答案,不建议优秀程序员使用。但他们没有解释Why,因为What reason, programmers should avoid this?任何人都可以通过适当的链接或文件给出明确的解释吗?

2 个答案:

答案 0 :(得分:2)

这只是一种语法糖。 string方法没有参数,所以它被视为一个getter,实际上并不是这样。 stringWithString:是带参数的方法,所以你不能这样调用。

一般来说,我不建议在方法中使用点语法,这令人困惑。 Objective-C dot notation with class methods?

<强>更新

我认为你没有任何技术原因可以避免它。 它更像是编码风格,保持代码清洁和一致。

答案 1 :(得分:2)

NSMutableString.string是一个黑客。它“起作用”的原因与myString.length[myString length]产生相同的结果相同。但是,由于点符号不与实际属性一起使用,因此滥用语言功能,因为属性具有不同的语义。例如,当您多次访问属性时,您自然希望获得相同的结果,除非在两次调用之间对象的状态发生了变化。由于NSMutableString.string在每次调用时都会生成一个新的字符串对象,因此它会破坏“正确”属性所需的语义,从而降低程序的可读性。

Objective-C没有使用点表示法调用带参数的方法的一般方法。该功能非常特定于属性。虽然理论上你可以使用MyClass.xyz = abc代替[MyClass setXyz:abc],但这也是一个黑客攻击。

要回答您的问题,Objective-C不提供使用点表示法调用[NSMutableString stringWithString:@"test"]的方法。