运行时中给一个对象绑定另外一个对象
对象 一个 运行 绑定 另外
2023-09-14 08:57:58 时间
运行时中给一个对象绑定另外一个对象
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
#import "B.h" @implementation B - (void)dealloc NSLog(@"B dealloc"); @end
然后写如下的代码:
当a被释放的时候,B类的这个实例也被释放了,上图打印信息 B dealloc 就能看出来.
b对象是否被a对象强引用了呢?
我们可以用如下方式来验证:
发现并无打印信息,我们再来试试下面的方式:
这个例子已经足以证明a对象对b对象强引用了.
知道了这点,我们就对这两个方法进行简单的封装:
RuntimeConnection.h + RuntimeConnection.m
我们来给一个People类,通过category的方式添加一个新的属性.
People类的category.
以下为使用情况:
总结:
对象a --(通过一个key值)关联-- 对象b
对象a --(通过一个key值)取出-- 对象b
注意:不同的对象可以对应一个key值.
访问对象的属性,你知道有哪些方法? 相信对象对于每个使用JavaScript的人来说都不陌生。访问对象的属性几乎日常开发每天都在用。下面我们一起探索下有哪些方式可以实现属性的访问。
28、实例对象与 new 命令 面向对象编程(Object Oriented Programming,缩写为 OOP)是目前主流的编程范式。它将真实世界各种复杂的关系,抽象为一个个对象,然后由对象之间的分工与合作,完成对真实世界的模拟。
我们知道引用只是一个别名,与变量共享存储空间,并且必须在定义的时候初始化,而且不能再成为别的变量的别名,这让我们想到什么呢,貌似跟 int * const p 的性质很像。
类中静态方法的调用,根据传入值生成不同类但同一个接口对象,调用其中实现的接口的方法. 实现同一个接口的不同的类,根据调用总和类中静态类型(返回值同接口)方法,(传入不同值),根据if else判定该new哪一个实现类.从而使用不同的接口的实现方法. 将编程看作是一门艺术,而不单单是个技术。
相关文章
- Osg-Osg实例牛对象平移效果(Qt5.14.2+osgEarht3.6.5+win10)-No7-translation
- 面试-类和对象的区别
- spring mvc绑定对象String转Date解决入参不能是Date的问题
- 设计一个不强引用对象的单例字典
- JS中对象与数组(大括号{}与中括号[])
- 使用final关键字修饰一个变量时,是引用不能变,还是引用的对象不能变?
- Java里的class对象 - class object
- C# 将一个对象转换为指定类型
- atitit.guice3 绑定方式打总结生成非单例对象toInstance toProvider区别 v2 pb29
- Java //EX2.17 设page是Graphics类的一个对象,编写一条语句画一个以(50, 50)为圆心,20像素为半径的圆
- QTextEdit添加文本对象(将N个文字结合成一个整体)
- js替换数组中的一个对象用for循环遍历
- 把对象通过流序列化到某一个持久性介质称为对象的可持久化