Objective-C 运行时(成员变量和属性)
2016-06-24 11:13
585 查看
成员变量、属性
基础数据类型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 );
相关文章推荐
- Java Runtime Environment 5.0 Update 12 下载
- php set_magic_quotes_runtime() 函数过时解决方法
- Asp.Net 程序错误Runtime Error原因与解决
- System 类 和 Runtime 类的常用用法介绍
- Objective-C的内省(Introspection)用法小结
- Objective-C中常用的结构体NSRange,NSPoint,NSSize(CGSize),NSRect实例分析
- Objective-C中使用NSString类操作字符串的方法小结
- Objective-C中NSNumber与NSDictionary的用法简介
- Objective-C实现冒泡排序算法的简单示例
- Objective-C中NSLog输出格式大全
- Objective-C实现自定义的半透明导航
- 浅析Objective-C的程序结构及面向对象的编程方式
- Objective-C的入门学习笔记
- Objective-C实现无限循环轮播器
- 全面解析Objective-C中的block代码块的使用
- Swift调用Objective-C编写的API实例
- Swift、Objective-C、Cocoa混合编程设置指南
- Objective-c代码如何移植为Swift代码 Objective-c代码转移到Swift过程介绍
- Swift调用Objective-C代码
- Objective-C中字符串NSString的常用操作方法总结