Положение * относительно имени переменной не имеет значения для компилятора.Некоторые предпочитают ставить * с переменной, потому что это позволяет избежать путаницы при объявлении нескольких переменных:
char* a, b; // a is char* and b is char, but both look like char*
char *a, b; // looks a little more like the truth: a is char*, b is char
Однако вы всегда ссылаетесь на объекты в Objective-C с помощью указателей,так что вы никогда не сделаете что-то вроде первой строки ниже:
NSString *a, b; // WRONG: a is a pointer to an NSString object, b is just wrong.
NSString *a, *b; // OK: both a and b are pointers to NSString objects
Позиция const
, с другой стороны, имеет значение:
int * const a; // a points to an int, and a can't be modified to point to some other int
int const * a; // a points to an int, and that int can't be changed
Теперь,const
не имеет большого смысла в отношении объектов.С одной стороны, NSString представляет собой неизменяемую строку, поэтому объявление одной const
мало что добавляет.С другой стороны, в общем случае объект модифицируется в Objective-C путем отправки сообщения, а не путем непосредственного изменения иваров объекта, и я не верю, что компилятор предотвратит изменения, сделанные с помощью сообщений.Следовательно, указатель const
имеет смысл, указатель на объект const
, не так много:
NSString * const BLANK_SPACE = @" "; // makes sense; pointer BLANK_SPACE can't change
NSString const * BLANK_SPACE = @" "; // not useful