分类.h文件:
#import <AppKit/AppKit.h>
#import "LGPerson.h"
NS_ASSUME_NONNULL_BEGIN
@interface LGPerson (LG)
//分类添加属性
@property (nonatomic, copy) NSString *cate_name;
@end
NS_ASSUME_NONNULL_END
分类.m文件:
//
// LGPerson+LG.m
// objc-debug
//
// Created by Cooci on 2019/12/3.
//
#import "LGPerson+LG.h"
#import <objc/runtime.h>
#import <AppKit/AppKit.h>
@implementation LGPerson (LG)
///属性的set方法
-(void)setCate_name:(NSString *)cate_name{
/**
参数一:id object : 给哪个对象添加属性,这里要给自己添加属性,用self。
参数二:void * == id key : 属性名,根据key获取关联对象的属性的值,在objc_getAssociatedObject中通过次key获得属性的值并返回。
参数三:id value : 关联的值,也就是set方法传入的值给属性去保存。
参数四:objc_AssociationPolicy policy : 策略,属性以什么形式保存。
*/
objc_setAssociatedObject(self, @"name",cate_name, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
/**
存储
manager -> hashMap 有所有的关联对象 - 总表 - 千千万的 -> 关联表 -> index -> 属性
哈希
哈希函数 -> index - key (属性) + 地址 (对象)
*/
}
///属性的get方法
-(NSString *)cate_name{
/**
参数一:id object : 获取哪个对象里面的关联的属性。
参数二:void * == id key : 什么属性,与objc_setAssociatedObject中的key相对应,即通过key值取出value。
*/
return objc_getAssociatedObject(self, @"name");
}
@end
关联对象

网友评论