iphone在堆中分配变量的位置

时间:2011-03-22 03:43:46

标签: iphone memory-management heap

我来自微控制器编程世界,我正在学习在iOS上编程,

我有一个困扰我的问题:

  • 如何知道分配给对象的内存的物理地址?

     NSString *nombre = [[NSString alloc] initWithString:@"nombreName"];
    

喜欢hexa地址?在哪里看到这个?

  • 堆有多大?我可以在开始时和分配给对象后看到堆吗?

3 个答案:

答案 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。在运行菜单下查看。应该有一个名为“使用性能工具运行”的条目。你应该找到你需要的一切。

相关问题