美文网首页
12.2.类分类

12.2.类分类

作者: ChaosHeart | 来源:发表于2020-10-09 09:16 被阅读0次

分类.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

关联对象


截屏2020-10-08 16.55.37.png

相关文章

网友评论

      本文标题:12.2.类分类

      本文链接:https://www.haomeiwen.com/subject/klweuktx.html