12.2.类分类

2020-10-09  本文已影响0人  ChaosHeart

分类.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
上一篇 下一篇

猜你喜欢

热点阅读