我来自微控制器编程世界,我正在学习在iOS上编程,
我有一个困扰我的问题:
如何知道分配给对象的内存的物理地址?
NSString *nombre = [[NSString alloc] initWithString:@"nombreName"];
喜欢hexa地址?在哪里看到这个?
答案 0 :(得分:0)
您可以使用快照查看堆的状态并分析您的应用程序。
示例:http://useyourloaf.com/blog/2011/3/8/using-heapshots-to-find-abandoned-memory.html
答案 1 :(得分:0)
在调试时使用gdb在运行时检查对象。
我创建了一个简单的UIView对象,
UIView *someObject = [[UIView alloc] init];
并在此行上设置断点,
单步执行此行,以便分配someObject的内存,然后在gdb上运行po
或打印对象,显示该对象的十六进制地址 - 0x9304090
。
(gdb) po someObject
<UIView: 0x9304090; frame = (0 0; 0 0); layer = <CALayer: 0x4b1b730>>
如果已覆盖对象的description
方法,则可能看不到十六进制地址。对于这些对象,只需打印指针
(gdb) p someObject
$2 = (UIView *) 0x9304090
或将其转换为int以将内存位置视为小数。
(gdb) p (int) someObject
$3 = 154157200
答案 2 :(得分:0)
示例中对象的内存地址为“nombre”。您可以这样显示:
NSLog(@"nombre address is %x", nombre);
至于分析内存堆问题,您只需要看看XCode。在运行菜单下查看。应该有一个名为“使用性能工具运行”的条目。你应该找到你需要的一切。