码迷,mamicode.com
首页 > 其他好文 > 详细

运行时中给一个对象绑定另外一个对象

时间:2014-05-08 14:08:55      阅读:280      评论:0      收藏:0      [点我收藏+]

标签:style   blog   class   code   java   color   

运行时中给一个对象绑定另外一个对象

bubuko.com,布布扣

category中,如果想要添加一个属性,通常的做法是不可能的.我们都知道,category只能增加方法,不能增加属性.

但在运行时中我们可以动态的绑定一个对象.

 

有以下两个方法来绑定以及获取绑定的对象:

objc_setAssociatedObject 

Sets an associated value for a given object using a given key and association policy.

给一个指定的对象关联上一个值以及设置一个关联的策略.

 

objc_getAssociatedObject 

Returns the value associated with a given object for a given key.

根据给定的一个值返回关联的值.

 

我们来用最简单的例子来测试一下,新建类A以及类B,我们让类B的一个实例关联上类A.

A.h + A.m

#import <Foundation/Foundation.h>

@interface A : NSObject

@end
#import "A.h"

@implementation A

@end

B.h + B.m

#import <Foundation/Foundation.h>

@interface B : NSObject

@end
bubuko.com,布布扣
#import "B.h"

@implementation B

- (void)dealloc
{
    NSLog(@"B dealloc");
}

@end
bubuko.com,布布扣

然后写如下的代码:

bubuko.com,布布扣

当a被释放的时候,B类的这个实例也被释放了,上图打印信息 B dealloc 就能看出来.

b对象是否被a对象强引用了呢?

我们可以用如下方式来验证:

bubuko.com,布布扣

发现并无打印信息,我们再来试试下面的方式:

bubuko.com,布布扣

这个例子已经足以证明a对象对b对象强引用了.

知道了这点,我们就对这两个方法进行简单的封装:

RuntimeConnection.h + RuntimeConnection.m

bubuko.com,布布扣

bubuko.com,布布扣

我们来给一个People类,通过category的方式添加一个新的属性.

bubuko.com,布布扣

bubuko.com,布布扣

People类的category.

bubuko.com,布布扣

bubuko.com,布布扣

以下为使用情况:

bubuko.com,布布扣

 

总结:

对象a  --(通过一个key值)关联--> 对象b

对象a  --(通过一个key值)取出--> 对象b

注意:不同的对象可以对应一个key值.

 

 

 

 

 

 

 

运行时中给一个对象绑定另外一个对象,布布扣,bubuko.com

运行时中给一个对象绑定另外一个对象

标签:style   blog   class   code   java   color   

原文地址:http://www.cnblogs.com/YouXianMing/p/3713760.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!