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更合适。








网友评论