通过点运算符访问类方法

问题描述:

这个问题与知道我们不知道的东西有关。我正在研究“为什么人们不使用这个”?这背后有什么原因与特定技术有关?所以仔细阅读,并给予downvote或给出正确的答案。通过点运算符访问类方法

我们可以写

NSMutableString *string = NSMutableString.string; 

,而不是

NSMutableString *string = [NSMutableString string]; 

同我们如何写这个方法,

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

更新:

这个问题不是重复的,有点不同。我接受以下的答案,这对于优秀的程序员是不推荐的。但他们没有解释Why,对于What reason, programmers should avoid this?任何人都可以用适当的链接或文件给出清楚的解释吗?

+1

不应使用'NSMutableString.string;'。 '.'语法只能用于不属于普通方法的属性。由于您所分类的Objective-C消息的方式也适用于没有任何参数的方法。但是这不是假设以这种方式使用。 – rckoenes

+0

@rckoenes我的朋友,你在哪看到“我们不应该用这个点作为课程方法”?请显示一些参考。 – Mani

+2

这是一种不属于属性的方法,'.'语法是针对属性的。从Apple文档:[Objective-C提供了一种替代点语法来访问对象的属性。](https://developer.apple。com/library/ios/documentation/cocoa/conceptual/ProgrammingWithObjectiveC/EncapsulatingData/EncapsulatingData.html#// apple_ref/doc/uid/TP40011210-CH5-SW10) – rckoenes

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

Objective-C没有使用点符号使用参数调用方法的一般方法。这个功能对于属性非常具体。虽然理论上你可以使用MyClass.xyz = abc代替[MyClass setXyz:abc],但这也是一种破解。

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

+0

我可以部分接受你。这个陈述'点符号不用于一个实际的财产'应该是不正确的,我想?你怎么说这个?你能否显示一些链接或规格? – Mani

+0

查看我更新的问题.. – Mani

+0

@Mani我用一个简短的例子来说明通过属性语法调用“NSMutableString.string”有什么问题。 – dasblinkenlight

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

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

更新

我不认为有任何技术原因,你应该避免。 这是在编码风格的手段,保持代码干净和一致。

+0

我接受一件事,这不是所有程序员都推荐的。我的问题是“为什么”?为了什么”?。你的意思是“没有参数的类方法,被视为getter方法”?它是否正确? – Mani

+0

看到我更新的问题.... – Mani

+0

我的朋友,我知道这是不正确的编码风格。我正在研究“为什么人们不使用这个”?是否有任何理由与特定技术有关?我需要知道这一点。 – Mani