美文网首页
对象内存地址信息

对象内存地址信息

作者: 东方奇迹 | 来源:发表于2021-08-31 11:21 被阅读0次

class Persion {
var age: Int?
}
var pInstance = Persion()
var pType = Persion.self
pInstance对象的内存结构:八个字节存放指向源类型地址的指针,八个字节存放引用计数,八个字节存放age属性值

  • 打印pInstance指针变量指向的内存地址 (前八个字节是指向源类型(metadata)的指针,metadata存放着类型相关的信息)

  • 打印Persion类在内存中的地址(不知道咋打印)

  • 打印Persion.self在内存中的地址(是一个源类型(metadata)的指针地址,metadata存放着类型相关的信息)

      withUnsafePointer(to: &pInstance) {
          print(" str value “pInstance” has address: \($0)")
      }
    
      withUnsafePointer(to: &pType) {
          print(" str value “pType” has address: \($0)")
      }
    

str value “pInstance” has address: 0x0000000283b3b678
(lldb) x/4xg 0x0000000283b3b678(指针变量内存地址)
(指针变量所指向对象在堆空间中的内存地址)
0x283b3b678: 0x0000000283544ce0 0x00000001008ebe78
0x283b3b688: 0x0000000000000000 0x0100000204f64595
(lldb) x/4xg 0x0000000283544ce0(指向源类型的指针地址)
(源类型的地址)
0x283544ce0: 0x00000001008ebe78 0x0000000000000003
0x283544cf0: 0x0000000000000000 0x0000000000000001

str value “pType” has address: 0x0000000283b3b680
(lldb) x/4xg 0x0000000283b3b680(指针变量内存地址)
(源类型的地址)
0x283b3b680: 0x00000001008ebe78 0x0000000000000000
0x283b3b690: 0x0100000204f64595 0x0000000281e6d1f0

self、Self、Person

self和Self:

  • self在类方法中代表当类,在实例方法中代表当前实例;
  • .self可以用在类型后面取得类型本身,在实例后面取得这个实例本身;
  • Self表示特定类型,可以用于协议(protocol)中限制相关的类型,可以用于类(Class)中来充当方法的返回值类型;可以代表当前类型;

瞎猜之下:
Person.self == Self == Person;
Person.self == Self == Person和实例对象都关联着matadata元类数据信息,matadata元类数据以虚表的形式存放着类型相关信息;

OC里面有实例对象、类对象、元类对象,及它们分别所存储的信息;
swift里只发现了实例对象、元类型,及它们分别所存储的信息,没发现有类对象的概念,可能元类对象==类对象;
注意:类类型和元类类型的相同点与不同点;

相关文章

  • 对象内存地址信息

    class Persion {var age: Int?}var pInstance = Persion()var...

  • python基础: 使用频繁的内建帮助函数

    help() 获取指定对象的帮助信息 dir() 获取指定对象的属性和方法 id() 获取指定对象的内存地址 ty...

  • 内存对齐

    8字节:指针大小、对象、属性 首先打印出对象获取内存地址: 然后打印内存地址:用x打印内存地址 然后打印内存地址:...

  • 05. Go极简教程 几句话说明白指针

    总结 指针对象是用来存储内存地址的数据类型 &符号获取对象的内存地址 *符号根据内存地址获取值, 只有指针对象可以...

  • iOS 深拷贝和浅拷贝

    浅拷贝:将对象的内存地址进行拷贝,不会生成一份新的内存地址。其生成对象与原有对象会公用同一份内存地址 但是它不会改...

  • LLDB调试的实际应用

    一、常用命令 1. 打印(print) p指令可打印其对象类型、内存地址以及该对象的值等具体信息, po指令则是打...

  • 为什么重写equals要重写hashcode

    equals():判断两个对象的内存地址是否相等hashcode(): 返回当前对象的内存地址 可以用一个形象的比...

  • iOS底层原理--001:alloc & init

    内存地址 & 指针地址 搭建allocDemo项目打印对象的内存地址和指针地址- (void)viewDidLoa...

  • Django-admin源码解析

    单例模式 前言:实例化出来的每个对象都是不同的内存地址,调用每个对象的方法都是调用同一块内存地址 —— ...

  • iOS杂记

    1.内存地址转对象: 通过 Xcode 中的 【Debug View Hierarchy】,根据内存地址(比如:0...

网友评论

      本文标题:对象内存地址信息

      本文链接:https://www.haomeiwen.com/subject/gbfziltx.html