Category和Associative

Category,类目,可以为已有的类添加新的方法,但是要想在Category里扩展属性就要使用Runtime的Associative,使用Runtime来添加类目的属性。

static void * MyObjectMyCustomPorpertyKey = (void *)@"MyObjectMyCustomPorpertyKey";

@implementation MyObject (ExtendedProperties)

- (id)myCustomProperty

{

return objc_getAssociatedObject(self, MyObjectMyCustomPorpertyKey);

}

- (void)setMyCustomProperty:(id)myCustomProperty

{

objc_setAssociatedObject(self, MyObjectMyCustomPorpertyKey, myCustomProperty, OBJC_ASSOCIATION_RETAIN_NONATOMIC);

}

@end

以上即是使用Associative把self和myCustomProperty两个对象进行关联,从而达到为类目添加属性的目的。

objc_setAssociatedObject(self, KEY_TAGSTRING,
nil,OBJC_ASSOCIATION_RETAIN_NONATOMIC);
  //可以用来断开Associative

时间: 2024-08-01 17:52:42

Category和Associative的相关文章

Associative机制使用场景

1.    概念 objective-c有两个扩展机制:category和associative.我们可以通过category来扩展方法,但是它有个很大的局限性,不能扩展属性.于是,就有了专门用来扩展属性的机制:associative. 2.    使用方法 在iOS开发过程中,category比较常见,而associative就用的比较少.associative的主要原理,就是把两个对象相互关联起来,使得其中的一个对象作为另外一个对象的一部分. 使用associative,我们可以不用修改类的

利用Associative机制为UIAlertView添加一个Block属性,将AlertView与button的响应事件关联

1.详解:associative objective-c有两个扩展机制:category和associative.我们可以通过category对已经存在的类添加和扩展方法,但是它有一个很大的局限性,那就是不能扩展属性.于是,就有了专门用来扩展属性的机制:associative.关联对象是Runtime中一个非常实用的特性. associative的主要原理,就是在运行时把两个对象相互关联起来,使得其中的一个对象(A)作为另外一个对象(B)的一部分.即A对象通过给定的key连接到B对象上,作为B对

SDWebImage分析--源代码详细分析

SDWebImage源代码分析 前言 关于网上的源代码分析也应该是不少的了,不过对于这个经典的第三方图片下载缓存库的作者还是相当敬佩的.这里还是想就个人理解来分析下,当做笔记加深理解也好.想看大概流程就好的可以看我上一篇博客:传送门:SDWebImage分析–库处理流程分析 一.UIImage + WebCache 入口: 我们根据设置Image的时候跳转代码到定义位置其实可以看到几乎所有类型的设置情况都是指向一个函数,只不过是根据你需要的类型作者自行帮你加入了默认项: [self sd_set

uitextField限制字数方法和抖动效果

这个方法也是在网上找的.具体如下: .h文件 #import <UIKit/UIKit.h> @interface UITextField (LimitLength) /** * 使用时只要调用此方法,加上一个长度(int),就可以实现了字数限制,汉字不可以 * * @param length */ - (void)limitTextLength:(int)length; /** * uitextField 抖动效果 */ - (void)shake; @end .m文件 #import &q

对象关联(associated objects)

category与associative作为objective-c的扩展机制的两个特性,category即类型,可以通过它来扩展方法:associative,可以通过它来扩展属性:在iOS开发中,可能category比较常见,相对的associative,就用的比较少,要用它必须使用<objc/runtime.h>的头文件,然后就可以自由使用objc_getAssociatedObject以及objc_setAssociatedObject 对象关联(或称关联引用)本来是Objective-C

runtime - associated(关联)

category和associative作为objective-c的扩展机制的两个特性,category用来扩展类的方法,associative可以用来扩展类的属性.使用associative需要导入<objc/runtime.h>文件. 他有三个方法1.设置关联对象 objc_setAssociatedObject OBJC_EXPORT void objc_setAssociatedObject(id object, const void *key, id value, objc_Asso

objc runtime之属性扩展(objc_getAssociatedObject,objc_setAssociatedObject,objc_removeAssociatedObjects)

category与associative作为objective-c的扩展机制的两个特性,category即类型,可以通过它来扩展方 法:associative,可以通过它来扩展属性:在iOS开发中,可能category比较常见,相对的associative,就用的比较少,要用 它必须使用<objc/runtime.h>的头文件,然后就可以自由使用objc_getAssociatedObject以及 objc_setAssociatedObject,我们来看下这两个方法: 1.创建关联:参数设置

深入理解Objective-C:Category

摘要 无论一个类设计的多么完美,在未来的需求演进中,都有可能会碰到一些无法预测的情况.那怎么扩展已有的类呢?一般而言,继承和组合是不错的选择.但是在Objective-C 2.0中,又提供了category这个语言特性,可以动态地为已有类添加新行为.如今category已经遍布于Objective-C代码的各个角落,从Apple官方的framework到各个开源框架,从功能繁复的大型APP到简单的应用,catagory无处不在.本文对category做了比较全面的整理,希望对读者有所裨益. 简介

我眼中的 OC【category】 用法细节以及注意点

最近空闲的时候在看OC的面向对象特性,作为Apple的当家开发语言(请暂且忽略swift小兄弟,呵呵),OC近几年可谓风光无限.不过说真的,OC的确有他的美妙之处,一旦用到熟练就会发现OC其实非常顺手通俗.对于他的面向对象特性,“消息机制”.“Protocol”.“Catagory”,这三者绝对是三员大将,也是学习OC必须要掌握的技能.本文将从我个人的视角对catagory的理解,做简单的用法讲解. 另外,对于这三者的使用频率一般来说是,“消息机制”>“Protocol”>“Catagory”