【发布时间】:2013-09-21 21:08:40
【问题描述】:
我在尝试查看 NSString 使用的内存时卡住了:
我的 NSString theKey 在 lldb 中显示良好:
(lldb) p *theKey
(NSString) $5 = {
NSObject = {
isa = __NSCFConstantString
}
}
内容可见:
(lldb) po theKey
BBBBBBBBBB
我也得到了 NSString 对象的内存:
(lldb) fr v
(ViewController *const) self = 0x0897eb10
(SEL) _cmd = "viewDidLoad"
(NSString *) theKey = 0x00004664 @"BBBBBBBBBB"
当关于 NSString 对象的内存时,我只会得到奇怪的值:
(lldb) memory read 0x00004664
0x00004664: 50 93 87 01 c8 07 00 00 68 37 00 00 0b 00 00 00 P.......h7......
0x00004674: 50 93 87 01 c8 07 00 00 74 37 00 00 0b 00 00 00 P.......t7......
也就是说,一个 NSString 不是一个 char 数组,并且内存包含……是的……什么?如何找到存储在我的 NSString 中的字符的内存地址?
【问题讨论】:
-
NSStrings 以 unicode 存储字符,也许这就是内存看起来“奇怪”的原因? blog.ablepear.com/2010/06/objective-c-tuesdays-c-strings.html
-
NSString绝对不仅仅是一个字符数组。这是一个使用CFString备份的字符串类。正如你所看到的in CFString's source code,有很多东西。 -
所以,NSString 是一个 CFString。我在 CFString 的实现文件中找到了以下内容:
CF_EXPORT CFStringRef __CFStringMakeConstantString(const char *cStr);/* Private; do not use *看起来不错,不是吗?但是如何通过 NSString 实例访问这个指针呢?
标签: iphone ios objective-c xcode macos