я застрял при попытке взглянуть на память, используемая NSString:Как найти память, используемую 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"
Когда рег arding память объекта 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 не является массивом полукокса, и память содержит ... да ... что? Как найти адрес памяти, где хранятся символы, хранящиеся в моей NSString?
NSStrings магазин символов юникода, возможно, именно поэтому память выглядит «странно»? http://blog.ablepear.com/2010/06/objective-c-tuesdays-c-strings.html –
'NSString' определенно не просто массив символов. Это класс String, который поддерживается с помощью CFString. И как вы можете видеть [в исходном коде CFString] (http://opensource.apple.com/source/CF/CF-550.43/CFString.c), есть много всего. –
Итак, NSString - это CFString. Я нашел следующее в файле реализации CFString: 'CF_EXPORT CFStringRef __CFStringMakeConstantString (const char * cStr);/* Частный; не используйте * 'Выглядит хорошо, не так ли? Но как я могу получить доступ к этому указателю через экземпляр NSString? –