iOS RunTime交换方法和给变量赋值的简单使用
2017-02-10 17:19
761 查看
在iOS可以用runtime做很多事,runtime赋予了oc面向对象开发的能力这里简单说一下runtime当程序调用一个不存在的方法的时候,系统会回调一些方法,这写方法可以帮助你处理因为调用不存在的方法而崩溃的问题。+ (BOOL)resolveClassMethod:(SEL)sel;+ (BOOL)resolveInstanceMethod:(SEL)sel;- (id)forwardingTargetForSelector:(SEL)aSelector;- (void)forwardInvocation:(NSInvocation *)anInvocation;第一个方法是当你调用一个不存在的类方法的时候,会调用这个方法,默认返回NO,你可以加上自己的处理然后返回YES第二个方法和第一个方法相似,只不过处理的是实例方法第三个方法是将你调用的不存在的方法重定向到一个其他声明了这个方法的类,只需要你返回一个有这个方法的target第四个方法是将你调用的不存在的方法打包成NSInvocation传给你。做完你自己的处理后,调用invokeWithTarget:方法让某个target触发这个方法关联对象现在你准备用一个系统的类,但是系统的类并不能满足你的需求,你需要额外添加一个属性。这种情况的一般解决办法就是继承。但是,只增加一个属性,就去继承一个类,总是觉得太麻烦类。这个时候,runtime的关联属性就发挥它的作用了static char associatedObjectKey;
objc_setAssociatedObject(target, &associatedObjectKey, @
"添加的字符串属性"
, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
NSString *string = objc_getAssociatedObject(target, &associatedObjectKey);23b4cobjc_setAssociatedObject的四个参数:id object给谁设置关联对象。const void *key关联对象唯一的key,获取时会用到。id value关联对象。objc_AssociationPolicy关联策略,有以下几种策略:enum {
OBJC_ASSOCIATION_ASSIGN = 0,
OBJC_ASSOCIATION_RETAIN_NONATOMIC = 1,
OBJC_ASSOCIATION_COPY_NONATOMIC = 3,
OBJC_ASSOCIATION_RETAIN = 01401,
OBJC_ASSOCIATION_COPY = 01403
};
其实,你还可以把添加和获取关联对象的方法写在你需要用到这个功能的类的类别中,方便使用。
- (void)addAssociatedObject:(id)object{
objc_setAssociatedObject(self, @selector(getAssociatedObject), object, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
}
- (id)getAssociatedObject{
return
objc_getAssociatedObject(self, _cmd);[/code]
}[/code]
注意:这里面我们把getAssociatedObject方法的地址作为唯一的key,_cmd代表当前调用方法的地址。[/code]方法交换示例:[/code][/code][/code]
相关文章推荐
- iOS之覆盖系统方法(使用runtime交换方法)
- iOS 面试题(十):runtime 使用——(动态添加方法/动态交换方法/动态添加属性)
- iOS开发中大部分App的网络数据交换是基于HTTP协议的。本文将简单介绍在Swift中使用HTTP进行网络请求的几种方法。
- XZ_iOS之Runtime使用运行时交换方法
- iOS_Runtime修改变量值,交换方法实现,动态添加类,成员变量和方法
- iOS:runtime的使用(动态添加方法、关联方法、交换方法、遍历私有属性)
- IOS学习:UINavigationController简单使用方法
- iOS开发之深入探讨runtime机制02-runtime的简单使用
- 《面向对象程序设计与VC++实现》--Liwei_1_3 (交换 使用引用、指针、变量三种方法)
- 交换两个变量的值,不使用第三个变量的四种法方法
- iOS-浅谈runtime运行时机制02-runtime简单使用
- 将HTML段赋值给PHP变量的便捷方法,不使用转义字符
- 玩玩小技巧(1)_三种方法不使用临时变量交换两个数的值
- 交换两个数字,不借助于第三个变量的三种简单的方法。
- JQuery中使用Ajax赋值给全局变量失败异常的解决方法
- 交换变量的三种方法及简单分析
- python基础教程之简单入门说明(变量和控制语言使用方法)
- [黑马程序员] _变量的基本使用方法(赋值、占位符、接收、命名规则)
- objc_runtime使用方法的几个简单例子
- 交换两个变量的值的方法-----从简单问题入手