NSObject+BBARuntime.h
3.29 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
//
// NSObject+BBARuntime.h
// BBAPods
//
// Created by guojin on 16/5/17.
// Copyright © 2016年 Baidu. All rights reserved.
//
#import <Foundation/Foundation.h>
#import "BDPFoundationDefines.h"
/**
* 运行时的基本方法,包括 bba_respondsToSelector 和 MethodSwizzling
* 详细介绍请看README-BBARuntime
*/
@interface NSObject (BBARuntime)
/**
* @brief 当前类(而非父类)是否实现了Selector
*
* @param selector 方法
* @return BOOL
*/
- (BOOL)bba_respondsToSelector:(SEL)selector BDP_FOUNDATION_DEPRECATED("please use bdp_respondsToSelector:");
- (BOOL)bdp_respondsToSelector:(SEL)selector;
/**
* @brief 动态执行指定selector方法,并指定对应的参数,若当前selector有返回值,该方法将返回对应的返回值;若没有,则返回nil
*
* @param selector 动态待执行的方法
* @param params 待执行的方法所需的参数:
1. 对于参数为基本类型的,通过NSNumber包装进行传递;
2. 参数为CGRect、CGSize等结构体的,用NSValue包装传递;
3. 对于原方法的参数需传递nil的case,通过NSNull进行传递;
4. 对于参数为SEL类型的,通过NSStringFromSelector包装成一个NSString进行传递
*
* @return 该方法的返回值:
1. 对于返回值为基本类型的,如:NSInteger、BOOL等,则会返回NSNumber对象;
2. 对于返回值为CGSize、CGRect、CGPoint等结构体,则会返回NSValue对象;
3. 对于返回值为SEL类型的,则会返回NSString对象,通过NSSelectorFromString解析出对应的SEL
4. 对于无返回类型 和 无法正确提取出返回值的case,则返回nil
*/
+ (id)bba_dynamicPerformSelector:(SEL)selector withParams:(NSArray *)params BDP_FOUNDATION_DEPRECATED("please use bdp_dynamicPerformSelector:withParams:");
+ (id)bdp_dynamicPerformSelector:(SEL)selector withParams:(NSArray *)params;
- (id)bba_dynamicPerformSelector:(SEL)selector withParams:(NSArray *)params BDP_FOUNDATION_DEPRECATED("please use bdp_dynamicPerformSelector:withParams:");
- (id)bdp_dynamicPerformSelector:(SEL)selector withParams:(NSArray *)params;
/**
* @brief 遍历当前对象所有的可读写属性名 (只遍历当前对象的类所定义的属性,而不会遍历其父类定义的属性)
*
* @param block 遍历回调
*/
+ (void)bba_enumerateRWProperty:(void(^)(NSString *pname))block BDP_FOUNDATION_DEPRECATED("please use bdp_enumerateRWProperty:");
+ (void)bdp_enumerateRWProperty:(void(^)(NSString *pname))block;
- (void)bba_enumerateRWProperty:(void(^)(NSString *pname))block BDP_FOUNDATION_DEPRECATED("please use bdp_enumerateRWProperty:");
- (void)bdp_enumerateRWProperty:(void(^)(NSString *pname))block;
@end
@interface BBARunTime : NSObject
/**
* @brief MethodSwizzling 实例方法
*
* @param origCls hook的类
* @param origSEL hook的方法
* @param cls 替换的类
* @param sel 替换的实例方法
*/
+ (void)replaceClass:(Class)origCls sel:(SEL)origSEL withClass:(Class)cls withSEL:(SEL)sel;
/**
* @brief MethodSwizzling 方法
*
* @param origCls origCls hook的类
* @param origSEL hook的方法
* @param cls 替换的类
* @param sel 替换的方法
* @param isClassMethod YES 类方法 NO 实例方法
*/
+ (void)replaceClass:(Class)origCls sel:(SEL)origSEL withClass:(Class)cls withSEL:(SEL)sel isClassMethod:(BOOL)isClassMethod;
@end