iOS中class_copyIvarList &class_co

2025-03-29  本文已影响0人  博文得礼

class_copyIvarList和class_copyPropertyList是iOS中runtime库的两个函数,它们的区别如下:

作用不同

• class_copyIvarList用于获取类的实例变量列表。实例变量是类中定义的用于存储对象状态的变量,通常是私有的,通过@synthesize指令可以自动生成对应的属性和存取方法。

• class_copyPropertyList用于获取类的属性列表。属性是一种更高级的概念,它可以有自己的访问控制、内存管理语义等,通过@property声明,编译器会自动生成相关的存取方法和实例变量(如果没有手动指定)。

返回值不同

• class_copyIvarList返回一个包含Ivar类型元素的数组,Ivar是runtime中表示实例变量的结构体,包含了实例变量的名称、类型编码、偏移量等信息。

• class_copyPropertyList返回一个包含objc_property_t类型元素的数组,objc_property_t是runtime中表示属性的类型,包含了属性的名称、特性字符串等信息。

遍历方式不同

• 遍历class_copyIvarList返回的列表时,通常使用Ivar结构体的相关函数来获取实例变量的具体信息,如ivar_getName获取实例变量的名称。

• 遍历class_copyPropertyList返回的列表时,一般使用property_getName获取属性的名称,还可以通过property_getAttributes获取属性的特性字符串,用于分析属性的存储类型、访问控制等信息。

在实际使用中,如果需要操作类的实例变量,就使用class_copyIvarList;如果是对类的属性进行操作,如获取属性的名称、特性等,那么class_copyPropertyList更合适。

上一篇 下一篇

猜你喜欢

热点阅读