2011-03-08 55 views
5

我遇到了几个例子,它们在标题中声明了类似NSString * mystring和NSString * mystring有什么区别

NSString* mystring; 

NSString *mystring; 

有什么区别?

+0

只要记住,选择一个并在整个项目中持续使用它。我不在乎哪一点,只是一致。 – 2011-09-03 21:04:56

回答

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两个整型指针。

+0

谢谢!我在做这件事 - 我从中学习的这本书在他们的使用方面并不一致,让我感到困惑。 – 2012-03-25 02:02:37

0

没有区别,只是编码风格偏好。

0

什么都没有,它们之间没有空间甚至是非常重要的。你甚至可以写NSString*mystring

0

在C(和Objective-C中,作为C的超集)中,*的放置仅仅是风格问题。

我建议您从Google的款式指南中检出relevant section

1

是首选项,如果你声明在同一行多个变量是很有用的,即

NSString* mystring1, mystring2; // Misleading, mystring2 is not a * 

NSString *mystring1, mystring2; // Is more clear 
0

无任何 - 这是一个个人喜好,你是否觉得...

  1. 这里谈到的变量的类型的的NSString指针(NSString* mystring

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

...更为清晰可辨。也就是说,只要你是一致的,你不应该放松睡眠。

3

没有区别。这是一个风格问题。

在Objective-C中,您几乎可以将星形视为变量“类型”的一部分。

但是,编译器将星型解释为“将此变量视为指向声明类型的指针”(在本例中为NSString)。它有趣的是在一次定义多个变量:

NSString *myString, *yourString; 

必须使用星上的每个变量。

0

没有区别。这是一个偏好和风格的问题。

  • 这里谈到的变量的类型NSString指针(NSString* mystring)
  • 的这里谈到这是一个指针(NSString *mystring)
  • 优势的第一个方法的NSString类型的变量:

    当编码到协议,有一些变量有明星,有些没有。例如:

    NSString*  _myString 
    id<SomeProtocol> _collaborator 
    

    与(更混乱):

    NString   *_myString 
    id<SomeProtocol> _collaborator 
    

    缺点这种方法:(如指出的)

    //Only the first is a pointer. 
    NSString* _myString, _anotherString 
    

    现代面向对象的语言(如Java)往往阻碍多个变量在一行上:http://java.sun.com/docs/codeconv/html/CodeConventions.doc5.html#2991

    相关问题