运行时
来源:互联网 发布:淘宝9.9元全国包邮 编辑:程序博客网 时间:2024/06/02 14:52
运行时
Objective-C运行时定义了几种重要的类型。Class:定义Objective-C类
Ivar:定义对象的实例变量,包括类型和名字。
Protocol:定义正式协议。
objc_property_t:定义属性。叫这个名字可能是为了防止和Objective-C 1.0中的用户类型冲突,那时候还没有属性。
Method:定义对象方法或类方法。这个类型提供了方法的名字(就是**选择器**)、参数数量和类型,以及返回值(这些信息合起来称为方法的**签名**),还有一个指向代码的函数指针(也就是方法的**实现**)。
SEL:定义选择器。选择器是方法名的唯一标识符。
IMP:定义方法实现。这只是一个指向某个函数的指针,该函数接受一个对象、一个选择器和一个可变长参数列表(varargs),返回一个对象.
get方法
objc_getAssociatedObject(object,key)
set方法
objc_setAssociatedObject(object,key, value,policy)
OBJC_ASSOCIATION_ASSIGN = 0, /*< 指定一个弱引用相关联的对象. / OBJC_ASSOCIATION_RETAIN_NONATOMIC = 1, /< 指定一个强引用相关联的对象. nonatomic. / OBJC_ASSOCIATION_COPY_NONATOMIC = 3, /< 指定相关的对象被复制. nonatomic. / OBJC_ASSOCIATION_RETAIN = 01401, /< 指定一个强引用相关联的对象. atomically. / OBJC_ASSOCIATION_COPY = 01403 /< 指定相关的对象被复制. atomically. /
objc_removeAssociatedObjects(object)//object 源对象//一般使用objc_setAssociatedObject 设为nil 来清除关联
为类添加属性Demo
static char flashColorKey;-(void) setFlashColor:(UIColor *) flashColor{ objc_setAssociatedObject(self, &flashColorKey, flashColor, OBJC_ASSOCIATION_RETAIN_NONATOMIC); }-(UIColor *) flashColor{ return objc_getAssociatedObject(self, &flashColorKey); }
为类添加方法
class_addMethod(Class cls, SEL name, IMP imp, const char *types)cls //要添加方法的类;name //添加的方法在本类里面叫做的名字,格式要和添加的方法一样;imp //IMP就是Implementation的缩写,它是指向一个方法实现的指针,每一个方法都有一个对应的IMP;types//比如:"v@:"意思就是这已是一个void类型的方法,没有参数传入。 //再比如 "i@:"就是说这是一个int类型的方法,没有参数传入。 //再再比如"i@:@"就是说这是一个int类型的方法,又一个参数传入。
为类添加方法DEMO
Person *p = [[Person alloc]init];class_addMethod([Person class], @selector(zc_xxx), class_getMethodImplementation([ViewController class], @selector(zc_addMethod)), "v@:");[p performSelector:@selector(zc_xxx)];- (void)zc_addMethod{ NSLog(@"addMethod");}
方法交换
Method old = class_getInstanceMethod([ViewController class], @selector(viewWillAppear:));Method new = class_getInstanceMethod([ViewController class], @selector(addFind));method_exchangeImplementations(old, new);//class_getInstanceMethod 获取方法//method_exchangeImplementations 方法交换
0 0
- 运行时
- 运行时
- 运行时和运行库
- 运行时异常之运行时权限
- loadrunner 运行场景-运行时设置
- ASP.NEThttp 运行时
- JBuilder运行时配置
- Eclipse 运行时选项
- 运行时库
- C运行时库
- C运行时库
- C运行时库
- about运行时库
- 运行时设计窗口
- javascript运行时错误
- Java运行时绑定
- 运行时库
- C运行时库
- 测试项目代码执行覆盖率
- Android Fresco框架入门
- 用户信息管理SSHE整合小案例
- 51nod oj 1022 石子归并 V2 【环形区间DP----四边形不等式优化】
- pip安装使用详解
- 运行时
- 抓住时间管理的关键理念
- 浅谈使用单元素的枚举类型实现单例模式
- 初级java开发常见问题及解决办法,已验证 全部干货
- AJAX实现(JS)
- 基类和派生类内存详解
- android WebView实现播放网络视频以及全屏显示
- 自定义View的尝试-A到Z快速搜索sideBar
- performSelector afterDelay 区别 dispatch_after 及 其他