ASP源码.NET源码PHP源码JSP源码JAVA源码DELPHI源码PB源码VC源码VB源码Android源码
当前位置:首页 >> 网络编程 >> IOS开发 >> iOS开发·runtime原理与实践: 关联对象篇

iOS开发·runtime原理与实践: 关联对象篇(1/8)

来源:网络整理     时间:2018-05-21     关键词:

本篇文章主要介绍了" iOS开发·runtime原理与实践: 关联对象篇",主要涉及到方面的内容,对于IOS开发感兴趣的同学可以参考一下: 本文Demo传送门:AssociatedObjectDemo摘要:编程,只了解原理不行,必须实战才能知道应用场景。本系列尝试阐述runtime相关理论的同时介绍...

本文Demo传送门:AssociatedObjectDemo

 iOS开发·runtime原理与实践: 关联对象篇

摘要:编程,只了解原理不行,必须实战才能知道应用场景。本系列尝试阐述runtime相关理论的同时介绍一些实战场景,而本文则是本系列的关联对象篇。本文中,第一节将介绍关联对象及如何关联对象,第二节将介绍关联对象最常用的一个实战场景:为分类添加属性,第三节将介绍关联对象另一个很重要的实战场景:为UI控件(比如,UIAlertView以及UIButton等等)关联事件Block体。

1. 什么是关联对象

1.1 关联对象

分类(category)与关联对象(Associated Object)作为objective-c的扩展机制的两个特性:分类,可以通过它来扩展方法;Associated Object,可以通过它来扩展属性;

在iOS开发中,可能category比较常见,相对的Associated Object,就用的比较少,要用它之前,必须导入的头文件。

1.2 如何关联对象

runtime提供了給我们3个API以管理关联对象(存储、获取、移除):

//关联对象
void objc_setAssociatedObject(id object, const void *key, id value, objc_AssociationPolicy policy)
//获取关联的对象
id objc_getAssociatedObject(id object, const void *key)
//移除关联的对象
void objc_removeAssociatedObjects(id object)

其中的参数

  • id object:被关联的对象

  • const void *key:关联的key,要求唯一

  • id value:关联的对象

  • objc_AssociationPolicy policy:内存管理的策略

2. 关联对象:为分类添加“属性”

2.1 分类的限制

先来看@property 的一个例子

@interface Person : NSObject
@property (nonatomic, strong) NSString *name;
@end

在使用上述@property 时会做三件事:

  • 生成实例变量 _property

  • 生成 getter 方法 - property

  • 生成 setter 方法 - setProperty:

相关图片

相关文章