runtime系列6---Declared Properties--属性声明
来源:互联网 发布:大众汽车维修软件平台 编辑:程序博客网 时间:2024/04/29 18:25
当编译器遇到属性声明时,它会生成一些可描述的元数据(metadata),将其与相应的类、category和协议关联起来。存在一些函数可以通过名称在类或者协议中查找这些metadata,通过这些函数,我们可以获得编码后的属性类型(字符串),复制属性的attribute列表(C字符串数组)。因此,每个类和协议的属性列表我们都可以获得。
与类型编码类似,属性类型也有相应的编码方案,比如readonly编码为R,copy编码为C,retain编码为&等。
通过property_getAttributes函数可以后去编码后的字符串,该字符串以T开头,紧接@encode type和逗号,接着以V和变量名结尾。比如:
- @property char charDefault;
描述为:Tc,VcharDefault
- @property(retain)ididRetain;
描述为:T@,&,VidRetain
Property结构体定义了一个指向属性描述符的不透明句柄:typedef struct objc_property *Property;。
通过class_copyPropertyList和protocol_copyPropertyList函数可以获取相应的属性数组:
- objc_property_t *class_copyPropertyList(Class cls, unsigned int *outCount)
- objc_property_t *protocol_copyPropertyList(Protocol *proto, unsigned int *outCount)
通过property_getName函数可以获取属性名称。
通过class_getProperty和protocol_getProperty可以相应地根据给定名称获取到属性引用:
- objc_property_t class_getProperty(Class cls, const char *name)
- objc_property_t protocol_getProperty(Protocol *proto, const char *name, BOOL isRequiredProperty, BOOL isInstanceProperty)
通过property_getAttributes函数可以获取属性的@encode type string:
const char *property_getAttributes(objc_property_t property)
以上函数组合成一段示例代码:
- @interface Lender : NSObject {
- float alone;
- }
- @property float alone;
- @end
- id LenderClass = objc_getClass("Lender");
- unsigned int outCount, i;
- objc_property_t *properties = class_copyPropertyList(LenderClass, &outCount);
- for (i = 0; i < outCount; i++) {
- objc_property_t property = properties[i];
- fprintf(stdout, "%s %s\n", property_getName(property), property_getAttributes(property));
- }
0 0
- runtime系列6---Declared Properties--属性声明
- 声明属性(Declared Properties)
- Properties Runtime
- Java系列-如何读取.properties属性文件
- item 6:理解 属性 properties
- Runtime & Properties 类
- !!!Obj-C 2.0 -- Chapter 4 Declared Properties
- C#3.0新特性系列:自动属性(Automatic Properties)
- Properties属性
- 属性 (Properties)
- Java中Runtime和Properties
- Objective-C 运行时编程指南 之 Declared Properties
- 高效开发iOS系列(runtime篇) -- debug模式下使用po命令打印model的属性和值(runtime + debugDescription)
- runtime动态添加属性
- runtime 关联属性
- runtime关联属性
- 利用runtime添加属性
- Runtime 动态添加属性
- 为什么有的网站跳离率很高
- nginx与tomcat整合
- 双向链表的C++实现
- 【计算机网络常见面试题】帧定界
- 议事厅
- runtime系列6---Declared Properties--属性声明
- 用PB实现客户端程序的自动升级
- windows搭建hadoop环境
- ubuntu 和win7双系统安装后win7无法启动解决办法
- linux新建文本文件
- 仿360新闻的热搜图片,win8风格随机九宫格布局
- linux vpn设置方法
- iOS 视频播放 MPMoviePlayerViewController
- 学习最小二乘法