NSString * mystring和NSString * mystring有什么区别

时间:2011-03-08 10:44:10

标签: objective-c

我遇到过几个示例,它们在标题中声明类似

NSString* mystring;

NSString *mystring;

有什么区别?

9 个答案:

答案 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)

无论如何 - 你是否认为是个人偏好......

  1. 这是一个类型为NSString指针的变量(NSString* mystring

  2. 这是一个NSString类型的变量,它是一个指针(NSString *mystring

  3. ......更清晰。也就是说,只要你保持一致,就不应该让你睡不着觉。

答案 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

    相关问题