我正试图摆脱使用 C 时的一些困惑。
在某种意义上使用 char *name
是否与使用 NSString *name
相同,因为指针仍然指向它的第一个内存分配?
当然 NSString
有很多额外的东西,但这不是我的意思,使用 char *name
可以让我像 NSString 一样工作*name
,这样我以后就可以只使用指针“name”了?
最佳答案
答案是否定的。
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
将是一个指向可能有很多 extras 的对象的指针,你不能依赖实际字符的位置数据存储或如何存储。它没有编码为 ASCII(下面的 Sherm Pendley 说它是 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 *name
,您将来仍然可以使用 NSString
指针。这就是我的意思:
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.
关于objective-c - 字符 * 与 NSString *,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5442939/