iOS之Category关联属性
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关联属性的更多相关文章
- iOS Category 添加属性实现原理 - 关联对象
iOS Category 添加属性实现原理 - 关联对象 RunTime为Category动态关联对象 使用RunTime给系统的类添加属性,首先需要了解对象与属性的关系.对象一开始初始化的时候其属性 ...
- 【iOS】关联属性存取数据
有时候我们需要在现有的类存放一些额外的信息,通常的做法是继承一个子类,然后定义新增加的属性,然而如果我们为每个需要的类都添加一个类显得太麻烦了,objc提供了一个关联属性的特性,可以给一个对象关联一个 ...
- iOS之 Category 属性 的理解
在 Objective-C 中可以通过 Category 给一个现有的类添加属性,但是却不能添加实例变量 反正读第一遍的时候我是有点晕的,可以添加“属性”,然后又说“添加实例变量”,第一感觉就好像 有 ...
- iOS中OC给Category加入属性
引: 非常多人知道能够用Category给已有的类加入一些新方法,可是不同于swift中的extension,Objective-C中的Category(类别)是不支持直接加入属性的.那假设就是须要加 ...
- iOS中Category和Extension 原理详解
(一)Category .什么是Category? category是Objective-C .0之后添加的语言特性,别人口中的分类.类别其实都是指的category.category的主要作用是为已 ...
- iOS分类Category探索
什么是Category? Category是Objective-C 2.0之后添加的语言特性,Category的主要作用是为已经存在的类添加方法,一般称为分类,文件名格式是"NSObject ...
- iOS数据存储之属性列表理解
iOS数据存储之属性列表理解 数据存储简介 数据存储,即数据持久化,是指以何种方式保存应用程序的数据. 我的理解是,开发了一款应用之后,应用在内存中运行时会产生很多数据,这些数据在程序运行时和程序一起 ...
- iOS类别(Category)
iOS类别(Category)与扩展(Extension) 苹果的官方文档 Category在iOS开发中使用非常频繁.尤其是在为系统类进行拓展的时候,我们可以不用继承系统类,直接给系统类添加方法,最 ...
- EF自动生成的(T4模板) 关联属性元数据修改
为了实现 T4模板关联属性 不要序列化的问题 就是要在具体的 关联属性上面添加一个元数据 这里利用以前的 Newtonsoft.Json 这个框架为例 效果应该为 就是要在关联属性上面添加元数据 [ ...
随机推荐
- [NOI2009][codevs1846]KCOJ0191]植物大战僵尸
题目描述 Description Plants vs. Zombies(PVZ)是最近十分风靡的一款小游戏.Plants(植物)和Zombies(僵尸)是游戏的主角,其中Plants防守,而Zombi ...
- qt ubutun各个版本下载地址
http://download.qt.io/archive/qt/ http://mirrors.melbourne.co.uk/ubuntu-releases/
- 洛谷P2504 [HAOI2006]聪明的猴子题解
题目 记录悲伤 已知猴子的数量以及猴子跳的最大距离 已知数的数量以及树的坐标 最小生成树 每两棵树之间的距离需要枚举来计算 算出最大值之后再与n只猴子进行比较记录答案 需要注意 在使用最小生成树的时候 ...
- Kafka Rebalance机制分析
什么是 Rebalance Rebalance 本质上是一种协议,规定了一个 Consumer Group 下的所有 consumer 如何达成一致,来分配订阅 Topic 的每个分区. 例如:某 G ...
- Ubuntu16.04安装Filebeat
Filebeat官方文档地址 https://www.elastic.co/guide/en/beats/filebeat/current/filebeat-installation.html 下载和 ...
- python总结二
1.在命令行:dd是删除光标所在的那一整行 yy是复制光标所在的那一整行 p是将已复制的数据在光标的下一行粘贴 P是将已复制的数据在光标的上一行粘贴 2.在命令行中查找的话 从上往下查找:/ 从下往上 ...
- 01.普通抖音新手如何从0开始入门3个月做到粉丝100w+
普通抖音新手如何从0开始入门3个月做到粉丝100w+ 今年以来,明显感觉抖音很火,大有干掉微信,取代淘宝,京东的感觉,如今年轻人,一周7天有7天要玩抖音,所以说未来不可估量. 如是,2019春节以后, ...
- JOI徽章
[题目描述] 日本信息学奥赛委员会为了应援将要去台湾参加 IOI 的选手们,打算制作一面新的 JOI 旗帜 .JOI 旗帜为由 M 行 N 列的 M*N 个正方形组 成的图形,每个正方形里写有 J,O ...
- [EXP]CVE-2019-0604 Microsoft SharePoint RCE Exploit
研表究明,汉字的序顺并不定一能影阅响读,比如当你看完这句话后,才发这现里的字全是都乱的. 剑桥大学的研究结果,当单词的字母顺序颠倒时,你仍旧可以明白整个单词的意思.其中重要的是:只要单词的第一个字母和 ...
- Java 中常见的 final 类
Java 中常见的 final 类 java.lang 包 public final class Boolean extends Object implements Serializable, Com ...