В чем разница между NSString * mystring и NSString * mystring - PullRequest
5 голосов
/ 08 марта 2011

Я встречал несколько примеров, в которых классы в заголовке объявляются по-разному, например

NSString* mystring;

или

NSString *mystring;

В чем разница?

Ответы [ 9 ]

15 голосов
/ 08 марта 2011

Это три совершенно разных лексических элемента, и количество пробелов между ними совершенно не имеет значения.Все они эквивалентны с точки зрения того, что генерирует компилятор:

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, , а не два целочисленных указателя.

3 голосов
/ 08 марта 2011

Разницы нет. Это вопрос стиля.

В Objective-C вы можете в значительной степени думать о звезде как о части типа переменной.

Однако компилятор интерпретирует звезду как «обрабатывает эту переменную как указатель на объявленный тип» (в данном случае NSString). Интересно определить сразу несколько переменных:

NSString *myString, *yourString;

Вы должны использовать звездочку в каждой переменной.

1 голос
/ 08 марта 2011

Является предпочтением и полезно, если вы объявляете несколько переменных в одной строке, а именно

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

NSString *mystring1, mystring2;  // Is more clear 
0 голосов
/ 03 сентября 2011

Нет никакой разницы. Это вопрос предпочтений и стиля.

Вот переменная типа 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 

Современные ОО-языки (например, Java), как правило, препятствуют использованию нескольких переменных в одной строке: http://java.sun.com/docs/codeconv/html/CodeConventions.doc5.html#2991

0 голосов
/ 08 марта 2011

Ничего подобного - это личное предпочтение того, что вы думаете ...

  1. Вот переменная типа указатель типа NSString (NSString* mystring)

    или

  2. Здесь указана переменная типа NSString, которая является указателем (NSString *mystring)

... более разборчиво.Тем не менее, до тех пор, пока вы последовательны, вам не стоит терять сон.

0 голосов
/ 08 марта 2011

В C (и Objective-C, в качестве надмножества C), размещение * - это просто вопрос стиля.

Я бы рекомендовал проверить соответствующий раздел из руководства по стилю Google.

0 голосов
/ 08 марта 2011

Нет различий в реальности.

0 голосов
/ 08 марта 2011

Ничего, даже не важно, чтобы между ними было пространство.Вы даже можете написать NSString*mystring.

0 голосов
/ 08 марта 2011

без разницы, просто предпочтение стиля кодирования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...