iOS控制台查看属性、方法、以及成员变量、指令的整理

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了iOS控制台查看属性、方法、以及成员变量、指令的整理相关的知识,希望对你有一定的参考价值。

参考技术A 我们都知道,iOS开发中很多信息都存在于一个类的信息中,其中通过 isa 指针能查询各种层级的内容以及方法、协议,以及属性等信息的查询,接下来我们通过项目的调试进行查看具体的内容。

首先我们在项目中创建一个类继承自 NSObject 的 LGPerson ,该类中存在了两个方法,一个对象方法,一个类方法,以及属性等;

以及相关的成员变量声明

然后我们在main.m中实例化这个类,并进行相应的断点调试

我们都知道,一个类的所有信息都存储在该类对象的 class_data_bits_t 的结构中,其中包括很多的信息,包括属性方法,协议,实例等等。而 class_data_bits_t 的结构是类首地址偏移 32位 ,也就是 0x20 ,所有我们拿到相应的类的地址,就能准确的拿出相关存储在 class_data_bits_t 中的内容,从而进行查看。
步骤整理:

打印结果是 :

结果是

结果是

结果是

无论我们查询方法,协议,以及成员变量,前边的7个步骤都是一样的,接下来我们就来看具体的内容,

打印结果是

结果是

结果是

我们看到有六个方法,第一个方法的名称为 sayHello 接下来我们逐个取出相应的方法

结果是

结果是

结果是

结果是

结果是

name = "setNickName:"
types = 0x0000000100000f95 "v24@0:8@16"
imp = 0x0000000100000d00 (KCObjc`-[LGPerson setNickName:])


结果是

types = 0x0000000100000f8d "@16@0:8"
imp = 0x0000000100000cd0 (KCObjc`-[LGPerson nickName])


以上就是所有的方法列表

打印结果是

结果是

结果是

结果是

结果是

结果是

结果是

结果是

结果是

结果是

结果是

offset = 0x00000001000023c0
name = 0x0000000100000ebe "_nickName"
type = 0x0000000100000f81 "@"NSString""
alignment_raw = 3
size = 8


结果是

我们发现以上打印方法的过程中并没有打印我们声明的 +(void)say666 方法,只打印了 -(void)sayHello; 方法,为什么打印呢?我们都知道我们所有的类方法,实际上在内存中都是以对象方法的形式存在,只是存在该类的 元类 中来反映出一个类的信息,我们如何查找类方法呢,其实很简单,在类的基础上找到元类就可以了

结果是

结果是

结果是

结果是

结果是

结果是

结果是

结果是

结果是

这样我们就完美的读取了我们的所有方法,属性以及成员变量,协议同理,

此文章的相关指令是自己总结和自我实践的过程,并没有什么借阅价值,只是自我记录和学习的过程,方便日后自己查找

PHP访问控制

访问控制

PHP 对属性或方法的访问控制,是通过在前面添加关键字 public(公有),protected(受保护)或 private(私有)来实现的。

  • public(公有):公有的类成员可以在任何地方被访问。
  • protected(受保护):受保护的类成员则可以被其自身以及其子类和父类访问。
  • private(私有):私有的类成员则只能被其定义所在的类访问。

在访问PHP类中的成员变量或方法时,如果被引用的变量或者方法被声明成const(定义常量)或者static(声明静态),那么就必须使用操作符::,

访问那些没有被const或者static修饰的变量时适用 ->。



以上是关于iOS控制台查看属性、方法、以及成员变量、指令的整理的主要内容,如果未能解决你的问题,请参考以下文章

ios 中 成员变量和属性的区别

2022-05-01:golang里,结构体B里包含一个结构体A和一个整型成员变量。现在要给结构体A实现一个方法,让它能访问到B的整型变量,这个方法应该怎么写? 如果还有结构体C,D,E,F...都和

成员变量和成员方法的访问控制修饰符都有哪些?

iOS 开发:成员变量(属性,实例变量)的相关知识

iOS成员变量和属性

iOS-self.和下划线访问的区别