美文网首页
获取属性,方法名列表

获取属性,方法名列表

作者: iLeooooo | 来源:发表于2017-11-02 11:01 被阅读4次

iOS代码混淆使用

方法:

- (void)logAllMethodsFromClass:(id)obj
{
    u_int count;
    //class_copyMethodList 获取类的所有方法列表
    Method *mothList_f = class_copyMethodList([obj class],&count) ;
    for (int i = 0; i < count; i++) {
        Method temp_f = mothList_f[i];
        // method_getImplementation  由Method得到IMP函数指针
        IMP imp_f = method_getImplementation(temp_f);
    
        // method_getName由Method得到SEL
        SEL name_f = method_getName(temp_f);
    
        const char * name_s = sel_getName(name_f);
        // method_getNumberOfArguments  由Method得到参数个数
        int arguments = method_getNumberOfArguments(temp_f);
        // method_getTypeEncoding  由Method得到Encoding 类型
        const char * encoding = method_getTypeEncoding(temp_f);
    
        NSLog(@"方法名:%@\n,参数个数:%d\n,编码方式:%@\n",    [NSString stringWithUTF8String:name_s],
          arguments,[NSString stringWithUTF8String:encoding]);
    }
    free(mothList_f);

}

属性

- (NSArray *)getAllProperties:(id)obj
{
    u_int count;

    //使用class_copyPropertyList及property_getName获取类的属性列表及每个属性的名称
    objc_property_t *properties  =class_copyPropertyList([obj class], &count);
    NSMutableArray *propertiesArray = [NSMutableArray arrayWithCapacity:count];
    for (int i = 0; i<count; i++)
    {
        const char* propertyName =property_getName(properties[i]);
        NSLog(@"属性%@\n",[NSString stringWithUTF8String: propertyName]);
        [propertiesArray addObject: [NSString stringWithUTF8String: propertyName]];
    }
    free(properties);
    return propertiesArray;
}

类方法,类方法存放在元组里面

- (NSArray *)getAllClassMethods:(id)obj {
    unsigned int methodCount = 0;
    const char *clsName = class_getName([obj class]);
    Class metaClass = objc_getMetaClass(clsName);
    Method *methodList = class_copyMethodList(metaClass, &methodCount);

    NSMutableArray *arr = [NSMutableArray array];

    for (int i = 0; i < methodCount ; i ++) {
        Method method = methodList[i];
        SEL selector = method_getName(method);
        const char *methodName = sel_getName(selector);
        NSLog(@"%s",methodName);
        NSString *str = [NSString stringWithFormat:@"%s",methodName];
        [arr addObject:str];
    }

    return arr;
}

慢慢来,一步一个巴掌印~~~

相关文章

  • ios中runtime 笔记

    常见方法 1.获取属性列表 2.获取方法列表 3,获取成员变量列表 4,获取协议列表 5,获得类方法

  • RunTime 相关函数使用

    方法交换,一般在分类的load方法使用 获取方法列表 获取实例变量列表 获取实例属性列表 获取协议列表 为类别添加...

  • iOS中Runtime常用示例

    Runtime的内容大概有:动态获取类名、动态获取类的成员变量、动态获取类的属性列表、动态获取类的方法列表、动态获...

  • iOS-Runtime

    Runtime的内容大概有:动态获取类名、动态获取类的成员变量、动态获取类的属性列表、动态获取类的方法列表、动态获...

  • iOS-runtime使用总结

    关联 获取类名 获取属性列表(公有和私有) 获取成员变量 修改对象指针 方法交换(Method Swizzling...

  • Runtime使用总结

    本文主要内容有:获取属性/方法/协议/成员变量列表、动态关联属性、动态添加方法、方法交换。 一、获取列表 使用Ru...

  • 关于类对象和类方法 实例方法的runtime理解

    1.通过runtime 可以获取方法列表和属性(其中方法列表可以是实例方法列表也可以是类方法列表) 1.获取方法列...

  • iOS获取某类的属性/方法/成员变量/协议列表

    需要用到: 在这里我们随便找一个控制器 //获取属性列表 //获取方法列表 //获取成员变量列表 //获取协议列表...

  • runtime基础

    目前我所了解的Runtime内容大约有:动态获取类名、动态获取类的成员变量、动态获取类的属性列表、动态获取类的方法...

  • 消息转发机制

    RunTime: 1、获取所有的属性列表、方法列表、协议列表 2、方法交换 3、方法拦截调用,容错处理 4、动态添...

网友评论

      本文标题:获取属性,方法名列表

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