Ответ - нет.
char*
предназначен для указания на простой массив (или один) char
значений данных.
char* myCharPtr = "This is a string.";
//In memory: myCharPtr contains an address, e.g. |0x27648164|
//at address 0x27648164: |T|h|i|s| |i|s| |a| |s|t|r|i|n|g|.|\0|
С другой стороны, NSString *name
будет указателем на объект, который может иметь лотов дополнений, и вы не можете полагаться на то, где хранятся фактические символьные данные или как. Он не закодирован как ASCII (Шерм Пендли внизу сказал, что это UTF-16), и может содержать дополнительные данные, такие как длина строки и т. Д.
NSString* myStringPtr = @"This is an NSString.";
//In memory: myStringPtr contains e.g. |0x27648164|
//at address 0x27648164: |Object data|length|You don't know what else|UTF-16 data|etc.|
Вы изменяете и получаете доступ к неизвестным объектам через их открытые методы, потому что вы не знаете, как они отформатированы в памяти, и, следовательно, не можете получить доступ к их данным напрямую. (Или потому, что они заключают себя в капсулу, чтобы скрыть это от вас.)
Вы все еще можете использовать указатель NSString
в будущем, если вы объявите его как NSString *name
. Вот что я имею в виду:
NSString *name = @"This is a string.";
NSString *sameName = name; //This is pointing to the same object as name
NSLog(@"%@", sameName); //This prints "This is a string.", and if NSStrings were mutable, changing it would change name as well.
//They point to the same object.