(一)关于64位
只了解内存相关的知识点,64bit就是8个字节,所以内存地址编号范围用16进制表示就是0x00 00 00 00 00 00 00 00 ~ 0x FF FF FF FF FF FF FF
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[]) {
@autoreleasepool {
// 创建NSObject对象
NSObject *obj = [[NSObject alloc] init];
//打印
NSLog(@"%@", obj);
NSLog(@"obj指向NSObject对象的地址:%p", obj);
NSLog(@"obj变量的地址:%p", &obj);
}
return 0;
}
如上图代码,obj是指针,obj中值是NSObject类实例对象的地址,
因为是64位寻址空间,所以obj需要8个字节的空间.对obj使用取地址符&,得到的是obj变量的地址.
[NSObject alloc] 这句代码就是让系统分配一段NSObject类需要的内存空间,然后把这段内存空间的首地址编号返回, 后面调用init方法,
按字面理解就是初始化,依然返回的是alloc分配内存空间的首地址编号.
对象的地址,就是对象的内存空间的首地址,这是为了方便表述.如果还是认为不好理解,就回想数组的情况,数组的地址就是数组第0个元素的地址.
(二)逐步验证,使用Xcode提供的View memory工具
1.如下图在工程中设置断点
设置断点,运行程序.png2.查看log打印,得到两个地址
运行结果,得到了2个地址.png3.复制obj变量的地址:0x7ffeefbff508(只复制16进制数据)
然后点击菜单命令:Debug -> Debug Workflow -> View memory 打开新的对话界面
点击菜单命令.png
网友评论