美文网首页
Runtime相关函数 class_copyMethodList

Runtime相关函数 class_copyMethodList

作者: _既白_ | 来源:发表于2019-05-21 17:24 被阅读0次

class_copyMethodList

// 获取一个类的所有方法
OBJC_EXPORT Method _Nonnull * _Nullable
class_copyMethodList(Class _Nullable cls, unsigned int * _Nullable outCount) 

cls: class
outCount :返回类中方法的个数
Method:返回包含所有方法的数组

实现一个类,定义属性,成员变量,实例方法,类方法:如下

#import "LoadFunction.h"

@interface LoadFunction ()
{
    NSString * _str; // 成员变量
}

// 属性
@property (nonatomic , copy) NSString *url;

@end

@implementation LoadFunction
// 类方法
+(void)load {
    NSLog(@"你好,宝贝");
}
+ (void)dog{
    NSLog(@"我是LoadFunction的中的go方法");
}
// 实例方法
- (void)big{
    
}
- (void)getStr{
    
}

@end

获取一个类的所有实例方法

// 获取LoadFunction类的所有实例方法
- (void)getAllInstanceMothed {
    unsigned int count; // 1
    Method *methods = class_copyMethodList([LoadFunction class], &count); // 2
    for (int i = 0; i < count; i++) { // 3
        NSLog(@"---%s", sel_getName(method_getName(methods[i]))); // 4
    } // 5
    free(methods); // 6
}
 TestLoadFunction[5711:237419] ---big //定义的实例方法
 TestLoadFunction[5711:237419] ---getStr // 定义的实例方法
 TestLoadFunction[5711:237419] ---.cxx_destruct
 TestLoadFunction[5711:237419] ---url // 属性url 的 get方法
 TestLoadFunction[5711:237419] ---setUrl // 属性url 的set方法

从上面我看可以得到如下结论:

  • 传入当前类LoadFunction,通过class_copyMethodList获取的都是这个类的实例方法,类方法没有获取到。
  • 成员变量是不会实现 get 和 set 方法的

获取一个类的所有类方法

- (void)getAllClassMothed {
    unsigned int count; // 1
    Class metaClass = object_getClass([LoadFunction class]); // 2 获取元类
    Method *methods = class_copyMethodList(metaClass, &count); // 3
    for (int i = 0; i < count; i++) { // 4
        NSLog(@"%s", sel_getName(method_getName(methods[i]))); // 5
    } // 6
    free(methods); // 7
}
TestLoadFunction[5909:253813] load
TestLoadFunction[5909:253813] dog

获取元类的函数是object_getClass,通过此方法获取元类,将元类当作class_copyMethodListcls,获取所有的类方法。

相关文章

网友评论

      本文标题:Runtime相关函数 class_copyMethodList

      本文链接:https://www.haomeiwen.com/subject/ftmjzqtx.html