我遇到过几个示例,它们在标题中声明类似
NSString* mystring;
或
NSString *mystring;
有什么区别?
答案 0 :(得分:15)
这是三个完全不同的词汇元素,它们之间的空白量完全无关紧要。这些都与编译器生成的内容完全相同:
NSString*x;
NSString *x;
NSString* x;
NSString * x;
NSString * x;
NSString /* comment here */ * /* and another */ x;
我更喜欢NSString *x
变体,因为指针说明符属于变量,不属于类型。通过这个,我的意思是这两个:
int *x, y;
int* x, y;
创建一个名为x
的整数指针和一个名为y
的整数,不是两个整数指针。
答案 1 :(得分:3)
没有区别。这是一种风格问题。
在Objective-C中,您几乎可以将星形视为变量“类型”的一部分。
但是,编译器将星形解释为“将此变量视为指向声明类型的指针”(在本例中为NSString)。有趣的是一次定义多个变量:
NSString *myString, *yourString;
您必须在每个变量上使用星号。
答案 2 :(得分:1)
是首选项,如果在同一行中声明多个变量,则非常有用,即
NSString* mystring1, mystring2; // Misleading, mystring2 is not a *
NSString *mystring1, mystring2; // Is more clear
答案 3 :(得分:0)
没有区别,只是编码风格偏好。
答案 4 :(得分:0)
没有什么,它们之间有空间甚至不重要。你甚至可以写NSString*mystring
。
答案 5 :(得分:0)
现实中没有差异。
答案 6 :(得分:0)
在C(和Objective-C,作为C的超集)中,*
的位置仅仅是一种风格问题。
我建议您查看Google风格指南中的relevant section。
答案 7 :(得分:0)
无论如何 - 你是否认为是个人偏好......
这是一个类型为NSString指针的变量(NSString* mystring
)
或
这是一个NSString类型的变量,它是一个指针(NSString *mystring
)
......更清晰。也就是说,只要你保持一致,就不应该让你睡不着觉。
答案 8 :(得分:0)
没有区别。这是一个偏好和风格的问题。
NSString
指针(NSString* mystring)
NSString
类型的变量,它是一个指针(NSString *mystring)
第一种方法的优点:
在对协议进行编码时,某些变量具有星形而某些变量没有问题。例如:
NSString* _myString
id<SomeProtocol> _collaborator
与(更令人困惑):
NString *_myString
id<SomeProtocol> _collaborator
回顾这种方法:(如所指出的)
//Only the first is a pointer.
NSString* _myString, _anotherString
现代OO语言(如Java)倾向于阻止一行中的多个变量:http://java.sun.com/docs/codeconv/html/CodeConventions.doc5.html#2991