Objective-C 运行时(成员变量和属性)
来源:互联网 发布:landmark软件安装 编辑:程序博客网 时间:2024/05/16 04:26
成员变量、属性
- 基础数据类型
Ivar是表示实例变量的类型,其实际是一个指向objc_ivar结构体的指针,其定义如下:
typedef struct objc_ivar *Ivar;struct objc_ivar { char *ivar_name OBJC2_UNAVAILABLE; // 变量名 char *ivar_type OBJC2_UNAVAILABLE; // 变量类型 int ivar_offset OBJC2_UNAVAILABLE; // 基地址偏移字节#ifdef __LP64__ int space OBJC2_UNAVAILABLE;#endif}
objc_property_t是表示Objective-C声明的属性的类型,其实际是指向objc_property结构体的指针,其定义如下:
typedef struct objc_property *objc_property_t;
objc_property_attribute_t定义了属性的特性(attribute),它是一个结构体,定义如下:
typedef struct { const char *name; // 特性名 const char *value; // 特性值} objc_property_attribute_t;
关联对象
关联对象(Associated Object)可以解决分类无法添加新的成员变量,可以把关联对象想象成一个Objective-C对象,这个对象通过给定的key连接到类的一个实例上。不过是C接口,所以key是一个void指针,需要指定内存策略,告诉Runtime如何管理这个对象的内存。
typedef OBJC_ENUM(uintptr_t, objc_AssociationPolicy) { OBJC_ASSOCIATION_ASSIGN = 0, OBJC_ASSOCIATION_RETAIN_NONATOMIC = 1, OBJC_ASSOCIATION_COPY_NONATOMIC = 3, OBJC_ASSOCIATION_RETAIN = 01401, OBJC_ASSOCIATION_COPY = 01403};
//设置关联对象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)
成员变量、属性的操作方法
获取成员变量名
const char * ivar_getName( Ivar v );
获取成员变量类型编码
const char * ivar_getTypeEncoding( Ivar v );
获取成员变量的偏移量
ptrdiff_t ivar_getOffset( Ivar v );
获取属性名
const char * property_getName( objc_property_t property );
获取属性特性描述字符串
const char * property_getAttributes( objc_property_t property);
获取属性中指定的特性,返回的char *在使用完后需要调用free()释放。
char * property_copyAttributeValue( objc_property_t property, const char *attributeName );
获取属性的特性列表,返回的char *在使用完后需要调用free()释放。
objc_property_attribute_t * property_copyAttributeList( objc_property_t property, unsigned int *outCount );
0 0
- Objective-C 运行时(成员变量和属性)
- Objective-C Runtime 运行时(二):成员变量与属性
- Objective-C Runtime 运行时:成员变量(ivars)及属性
- iOS学习笔记56(Runtime)-Objective-C Runtime 运行时之二:成员变量与属性
- Objective-C Runtime 运行时之二:成员变量与属性
- Objective-C Runtime 运行时之二:成员变量与属性
- Objective-C Runtime 运行时之二:成员变量与属性
- Objective-C Runtime 运行时之二:成员变量与属性
- Objective-C Runtime 运行时之二:成员变量与属性
- Objective-C Runtime 运行时之二:成员变量与属性
- Objective-C Runtime 运行时之二:成员变量与属性
- Objective-C Runtime 运行时之二:成员变量与属性
- Objective-C Runtime 运行时之二:成员变量与属性
- Objective-C Runtime 运行时之二:成员变量与属性
- Objective-C Runtime 运行时之二:成员变量与属性
- Objective-C Runtime 运行时之二:成员变量与属性
- Objective-C Runtime 运行时之二:成员变量与属性
- Objective-C Runtime 运行时之二:成员变量与属性
- Android NDK开发
- Why Protocol Buffer So Fast? ----protobuf编码详解
- Hive 学习笔记(一)
- 最短回文串[Codevs 3962]
- Android Theme 的一些简单信息
- Objective-C 运行时(成员变量和属性)
- Android通过JmDNS查找和注册设备的方法
- NioSocket相关知识
- 关于iOS中几种第三方对XML/JSON数据解析的使用
- Ehcache 页面缓存
- 第十五周项目:范型程序
- java 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。
- Hu矩
- Qualcomm物联网之智慧城市