Objective-C

/** 原文件 */
// Person.h
#import <Foundation/Foundation.h> @interface Person : NSObject
@property (nonatomic, copy) NSString *name;
@end // Person.m
#import "Person.h" @implementation Person
- (instancetype)init {
if (self = [super init]) {
_name = @""; NSLog(@"%@", [self class]); // Person
NSLog(@"%@", [super class]); // Person
}
return self;
} - (void)dealloc {
NSLog(@"Call dealloc in Person.m");
}
@end
/** Category文件*/
// Person+Category.h
#import "Person.h" @interface Person (Category)
// 添加属性address
@property (nonatomic, copy) NSString *address;
@end // Person+Category.m
#import "Person+Category.h"
#import <objc/runtime.h> @implementation Person (Category) static void *addressKey = &addressKey; #pragma mark - OC 在Category关联属性
- (void)setAddress:(NSString *)address {
objc_setAssociatedObject(self, &addressKey, address, OBJC_ASSOCIATION_COPY_NONATOMIC);
} - (NSString *)address {
return objc_getAssociatedObject(self, &addressKey);
} /** 在category里面执行dealloc方法后,Person类文件里的dealloc会不执行 */
- (void)dealloc {
objc_removeAssociatedObjects(self);
NSLog(@"remove associated");
}
@end
// test
#import "Person+Category.h" Person *p = [Person new];
p.name = @"xiaoMing";
p.address = @"gz";
NSLog(@"name is: %@, address is: %@", p.name, p.address);

Swift

// .swift文件
import Cocoa class Car {
var name = ""
} private var priceKey: Void?
extension Car {
/// car's price
var price: Double? {
get {
return objc_getAssociatedObject(self, &priceKey) as? Double
}
set {
objc_setAssociatedObject(self, &priceKey, newValue, .OBJC_ASSOCIATION_RETAIN_NONATOMIC)
}
}
} let c1 = Car()
c1.name = "su"
c1.price = 110000.1
print("c1's name is: \(c1.name) and price is: \(c1.price!)")

iOS之Category关联属性的更多相关文章

  1. iOS Category 添加属性实现原理 - 关联对象

    iOS Category 添加属性实现原理 - 关联对象 RunTime为Category动态关联对象 使用RunTime给系统的类添加属性,首先需要了解对象与属性的关系.对象一开始初始化的时候其属性 ...

  2. 【iOS】关联属性存取数据

    有时候我们需要在现有的类存放一些额外的信息,通常的做法是继承一个子类,然后定义新增加的属性,然而如果我们为每个需要的类都添加一个类显得太麻烦了,objc提供了一个关联属性的特性,可以给一个对象关联一个 ...

  3. iOS之 Category 属性 的理解

    在 Objective-C 中可以通过 Category 给一个现有的类添加属性,但是却不能添加实例变量 反正读第一遍的时候我是有点晕的,可以添加“属性”,然后又说“添加实例变量”,第一感觉就好像 有 ...

  4. iOS中OC给Category加入属性

    引: 非常多人知道能够用Category给已有的类加入一些新方法,可是不同于swift中的extension,Objective-C中的Category(类别)是不支持直接加入属性的.那假设就是须要加 ...

  5. iOS中Category和Extension 原理详解

    (一)Category .什么是Category? category是Objective-C .0之后添加的语言特性,别人口中的分类.类别其实都是指的category.category的主要作用是为已 ...

  6. iOS分类Category探索

    什么是Category? Category是Objective-C 2.0之后添加的语言特性,Category的主要作用是为已经存在的类添加方法,一般称为分类,文件名格式是"NSObject ...

  7. iOS数据存储之属性列表理解

    iOS数据存储之属性列表理解 数据存储简介 数据存储,即数据持久化,是指以何种方式保存应用程序的数据. 我的理解是,开发了一款应用之后,应用在内存中运行时会产生很多数据,这些数据在程序运行时和程序一起 ...

  8. iOS类别(Category)

    iOS类别(Category)与扩展(Extension) 苹果的官方文档 Category在iOS开发中使用非常频繁.尤其是在为系统类进行拓展的时候,我们可以不用继承系统类,直接给系统类添加方法,最 ...

  9. EF自动生成的(T4模板) 关联属性元数据修改

    为了实现 T4模板关联属性 不要序列化的问题 就是要在具体的 关联属性上面添加一个元数据 这里利用以前的 Newtonsoft.Json 这个框架为例 效果应该为 就是要在关联属性上面添加元数据  [ ...

随机推荐

  1. [NOI2009][codevs1846]KCOJ0191]植物大战僵尸

    题目描述 Description Plants vs. Zombies(PVZ)是最近十分风靡的一款小游戏.Plants(植物)和Zombies(僵尸)是游戏的主角,其中Plants防守,而Zombi ...

  2. qt ubutun各个版本下载地址

    http://download.qt.io/archive/qt/ http://mirrors.melbourne.co.uk/ubuntu-releases/

  3. 洛谷P2504 [HAOI2006]聪明的猴子题解

    题目 记录悲伤 已知猴子的数量以及猴子跳的最大距离 已知数的数量以及树的坐标 最小生成树 每两棵树之间的距离需要枚举来计算 算出最大值之后再与n只猴子进行比较记录答案 需要注意 在使用最小生成树的时候 ...

  4. Kafka Rebalance机制分析

    什么是 Rebalance Rebalance 本质上是一种协议,规定了一个 Consumer Group 下的所有 consumer 如何达成一致,来分配订阅 Topic 的每个分区. 例如:某 G ...

  5. Ubuntu16.04安装Filebeat

    Filebeat官方文档地址 https://www.elastic.co/guide/en/beats/filebeat/current/filebeat-installation.html 下载和 ...

  6. python总结二

    1.在命令行:dd是删除光标所在的那一整行 yy是复制光标所在的那一整行 p是将已复制的数据在光标的下一行粘贴 P是将已复制的数据在光标的上一行粘贴 2.在命令行中查找的话 从上往下查找:/ 从下往上 ...

  7. 01.普通抖音新手如何从0开始入门3个月做到粉丝100w+

    普通抖音新手如何从0开始入门3个月做到粉丝100w+ 今年以来,明显感觉抖音很火,大有干掉微信,取代淘宝,京东的感觉,如今年轻人,一周7天有7天要玩抖音,所以说未来不可估量. 如是,2019春节以后, ...

  8. JOI徽章

    [题目描述] 日本信息学奥赛委员会为了应援将要去台湾参加 IOI 的选手们,打算制作一面新的 JOI 旗帜 .JOI 旗帜为由 M 行 N 列的 M*N 个正方形组 成的图形,每个正方形里写有 J,O ...

  9. [EXP]CVE-2019-0604 Microsoft SharePoint RCE Exploit

    研表究明,汉字的序顺并不定一能影阅响读,比如当你看完这句话后,才发这现里的字全是都乱的. 剑桥大学的研究结果,当单词的字母顺序颠倒时,你仍旧可以明白整个单词的意思.其中重要的是:只要单词的第一个字母和 ...

  10. Java 中常见的 final 类

    Java 中常见的 final 类 java.lang 包 public final class Boolean extends Object implements Serializable, Com ...