iOS开发class_copyPropertyList和class_copyIvarList的区别

1,527 阅读1分钟

class_copyPropertyList:通过类名获得类的属性变量。

class_copyIvarList: 通过类名获得类的实例变量。

也就是说:

class_copyPropertyList获得的是由@property修饰过的变量,

class_copyIvarList获得的是class_copyPropertyList修饰的以及在m文件的中@implementation内定义的变量

#import <Foundation/Foundation.h>

NS_ASSUME_NONNULL_BEGIN

@interface Model : NSObject

@property (nonatomic,copy) NSString *sex;
@property (nonatomic,copy) NSString *name;
@property (nonatomic,assign) NSInteger age;
@property (nonatomic,strong) NSDictionary *imgCode;

@end

NS_ASSUME_NONNULL_END
#import "Model.h"

@interface Model()

@property (nonatomic,copy) NSString *Id;

@end

@implementation Model
{
    NSInteger _index;
}

@end
#import "LGTestViewController.h"
#import "Model.h"

@interface LGTestViewController ()


@end

@implementation LGTestViewController


- (void)viewDidLoad {
    [super viewDidLoad];
    
    
    //使用的时候
    unsigned int propertiesCount = 0;
    unsigned int ivarsCount = 0;
    objc_property_t *properties = class_copyPropertyList([Model class], &propertiesCount);
    Ivar *ivars = class_copyIvarList([Model class], &ivarsCount);
    
    NSLog(@"propertiesCount = %u,ivarsCount = %u",propertiesCount,ivarsCount);
    
    //propertiesCount = 5,ivarsCount = 6
}