初学runtime--实现篇02(Category增加属性)

在IOS开发中,Category默认不能增加属性的,但操作runtime就能轻松搞定。

1.给NSObject添加分类NSObject (Extension),

1> 在NSObject+Extension.h中添加

@property (nonatomic, copy) NSString *value;

2> 在NSObject+Extension.m中

#import "NSObject+Extension.h"

#import <objc/runtime.h>

@implementation NSObject (Extension)

static char valueKey; // 关联属性值的key

- (void)setValue:(NSString *)value

{

// 将某个值 跟 某个对象关联起来

// 将某个值 存储到 某个对象中

objc_setAssociatedObject(self, &valueKey, value, OBJC_ASSOCIATION_COPY_NONATOMIC);

}

- (NSString *)value

{

// 通过valueKey取value值

return objc_getAssociatedObject(self, &valueKey);

}

@end

2. 在viewController中测试

- (void)viewDidLoad {

[super viewDidLoad];

NSString *str = @"jack";

str.value = @"abc";

self.value = @"哈哈哈";

NSLog(@"%@ ", str.name, self.name);

}

运行结果:

2015-06-10 17:07:27.488 运行时的应用-分类增加属性[1698:63864] abc 哈哈哈#import <objc/runtime.h>

时间: 2024-08-03 10:00:05

初学runtime--实现篇02(Category增加属性)的相关文章

iOS开发——实用技术OC篇&amp;给分类增加属性

给分类增加属性 关于分类的创建这里就不扯了,咱们直接开干 这里以文本看占位文字颜色为例一:简单方式(关键技术:KVC)1.在头文件定义一个属性 1 @property (nonatomic, strong) UIColor *placeholderColor; 2 /** 3 * 分类中只会产生属性对应Setter和Getter方法的声明,不会有实现,需要我们自己实现 4 */ 5 //-(void)setPlaceholderColor:(UIColor *)placeholderColor;

iOS runtime探究(四): 从runtiem开始实践Category添加属性与黑魔法method swizzling

你要知道的runtime都在这里 转载请注明出处 http://blog.csdn.net/u014205968/article/details/67639335 本文主要讲解runtime相关知识,从原理到实践,由于包含内容过多分为以下五篇文章详细讲解,可自行选择需要了解的方向: 从runtime开始: 理解面向对象的类到面向过程的结构体 从runtime开始: 深入理解OC消息转发机制 从runtime开始: 理解OC的属性property 从runtime开始: 实践Category添加属

objc runtime 动态增加属性-备用(?)

objective-c中,有类别可以在不修改源码的基础上增加方法:近排在看别人的开源代码时,发现还可以动态增加属性.而且是在运行时,太牛B了. 使用运行时库,必须要先引入 objc/runtime.h 可以使用的函数如下: OBJC_EXPORT void objc_setAssociatedObject(id object, const void *key, id value, objc_AssociationPolicy policy) 这个函数 OBJC_EXPORT id objc_ge

runtime第二部分成员变量和属性

接上一篇 http://www.cnblogs.com/ddavidXu/p/5912306.html 转载来源http://www.jianshu.com/p/6b905584f536 http://southpeak.github.io/2014/10/30/objective-c-runtime-2/ 比较实用的内容都用颜色的字标记,并配有代码,并在末尾放上代码demo. 类型编码(Type Encoding) Objective-C不支持long double类型.@encode(lon

[IOS初学]ios 第一篇 storyboard 与viewcontroller的关系

学习了一下ios,把一个基本的概念搞清楚了,在android或者wp中,大家基本都是习惯与一个画面场景代表一个类,新建场景的时候自动新建了类,但在ios中使用了storyboard之后发现,在storyboard中新加入了一个新的viewcontroller之后,就不知道在哪里写代码来控制这个viewcontroller,因为默认初始化创建这个app的时候自动带了一个viewcontroller. 对于我来说这个一开始就没搞清楚,就像下面这个图,建立了一个新的viewcontroller直接在s

mongodb用mongoose取到的对象不能增加属性

先定义了一个article的schema var mongoose = require('mongoose'); var Schema = mongoose.Schema; exports.schema = new Schema({ title: String,//标题 description: String,//描述 content: String,//内容 status:{type: Number, defalut: 0}, //未发布:0 ,发布:1 create_at: {type: D

mongodb用mongoose查库的对象,不能增加属性

node + koa2 + mongodb 写了一个给前端的接口 如果不是写这个接口,这辈子都发现不了mongodb里这个大坑 mongoose 是个ODM(Object Document Mapper),mongodb是nosql数据库,文档存储 mysql,sqlserver,oracle都是关系型数据库 所以mongodb无法在取到对象增加属性,必须在追加时候重新用一个对象,或者在schema中添加这个对象的key model.js // 这里用来建数据库表结构相关的 const mong

XML 增加属性

var resultDoc = new XmlDocument(); resultDoc.LoadXml("<root></root>"); resultDoc.DocumentElement.SelectSingleNode("//root") -------------------------以下为主要内容 XmlAttribute attr = xmldoc.CreateAttribute("name"); attr

[Qt入门篇]5 Qt的属性系统——声明属性

[Qt入门篇]5 Qt的属性系统--声明属性 Qt提供了灵活的属性系统,它基于Qt的元对象系统,不依赖于编译器,这保证了Qt独立于编译其和平台的特点.这篇文章主要看看如何声明属性. 属性系统比较复杂,先看一个简单的例子.在QWidget中,有很多属性的声明,找一个简单学习: Q_PROPERTY(boolmodalREADisModal) 这里出现了5个元素:Q_PROPERTY.bool.modal.READ.isModal.这五个元素都是啥作用呢? Q_PROPERTY:用于声明属性的宏: