美文网首页
6-关联对象

6-关联对象

作者: 今晚打老虎_9527 | 来源:发表于2018-07-31 19:05 被阅读0次

属性

  • 在类中声明一个属性会生成成员变量并声明和实现对应的set,get方法
  • 在分类中声明一个属性只会声明对应的set,get方法
  • 不能直接在分类中添加成员变量,但可以通过字典间接实现,涉及线程安全,不推荐这种方式
#import "Person.h"

@interface Person (Eat)

@property (assign, nonatomic) int age;

@end
#import "Person+Eat.h"

@implementation Person (Eat)

NSMutableDictionary* ages_;

+ (void)load{
    ages_ = [NSMutableDictionary dictionaryWithCapacity:1];
}

- (void)setAge:(int)age{
    NSString* key = [NSString stringWithFormat:@"%p",self];
    ages_[key] = @(age);
}

- (int)age{
    NSString* key = [NSString stringWithFormat:@"%p",self];
    return [ages_[key] intValue];
}

@end

关联对象

  • key可以用宏定义字符串代替
#import "Person+Eat.h"
#import <objc/runtime.h>

@implementation Person (Eat)

static const void * ageKey = &ageKey;

- (void)setAge:(int)age{
    
    objc_setAssociatedObject(self, ageKey, @(age), OBJC_ASSOCIATION_RETAIN_NONATOMIC);
}

- (int)age{
    return [objc_getAssociatedObject(self, ageKey) intValue];
}

@end
  • 关联对象原理
    (1)关联对象不是存储在被关联对象本身内存中
    (2)关联对象存储在全局统一的一个AssociationsManager中的AssociationsHashMap


    image.png

相关文章

  • 6-关联对象

    属性 在类中声明一个属性会生成成员变量并声明和实现对应的set,get方法 在分类中声明一个属性只会声明对应的se...

  • iOS日记6-关联对象

    1.使用场景 1.添加私有属性,用于更好地实现细节(声明在实现文件中)2.添加公有属性,增强category的功能...

  • Swift 为分类增加属性objc_getAssociated

    OC 获取关联对象 Swift 获取关联对象——错误的写法 Swift 获取关联对象——正确的写法 设置关联对象 ...

  • iOS runtime关联对象 objc_setAssociat

    关联对象的作用: 关联对象可以给某个对象关联一个或者多个其他对象,这些对象通过健来区分。 创建存储关联对象objc...

  • 基础6-面向对象

    基础6-面向对象 ###06.01_面向对象(面向对象思想概述)(了解) * A:面向过程思想概述 *第一步 ...

  • 关联对象

    关联对象的方式 关联对象源码基本思路 关联对象的结构:AssociationsHashManager // Ass...

  • 关联对象

    关联对象原理 关联对象并不是存储在被关联对象本身内存中,关联对象存储在全局的统一的一个AssociationsMa...

  • iOS 关联对象

    概述 关联对象顾名思义,就是给对象关联对象的意思,一个对象可以关联多个其他对象,这些对象通过key来区分,存储对象...

  • 关联对象

    关联对象会用被关联对象作为key,将关联对象存储到全局的哈希表里。 AssociationHashMap Asso...

  • iOS关联对象技术原理

    iOS关联对象技术原理 iOS关联对象技术原理

网友评论

      本文标题:6-关联对象

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