objective-c - 字符 * 与 NSString *

标签 objective-c c pointers nsstring char

我正试图摆脱使用 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/

相关文章:

ios - undefined symbol av_register_all()

objective-c - 从固定的 UIImageView 或按钮中拖出新的 UIImageView 对象

c - 为什么颜色在 ncurses 中不起作用?

c - 在 C 中将结构体的成员指向结构体本身

c - 指向函数的 Typedef 结构指针 (C)

objective-c - 如何从 Swift 调用 Objective-C 代码?

objective-c - 类在 Xcode 4 工作区中的不同 Xcode 项目之间在 IB 中共享。为什么?

android - 如何使用 Android 和 QT Creator 的 RTL SDR 库?

c - 在文本文件中插入 400 个数字

没有不安全的 C# 引用数组