objective-c中类似ruby枚举类的实例方法

简介:

虽然obj-c的语法格式略显繁琐,但它和ruby都从某些方面继承了smalltalk的某些动态的东西。这些东西是
C和C++之类的静态语言所不曾有的。
比如ruby中可以将一个类或对象的所有方法枚举出来,在obj-c中我们同样可以这样做:

#import <Foundation/Foundation.h>

int main(void){
    @autoreleasepool{
        unsigned int count = 0;
        Method *ms = class_copyMethodList([NSArray class],&count);
        for(int i=0;i<count;i++){
            char *ret_type = method_copyReturnType(ms[i]);
            const char *name = sel_getName(method_getName(ms[i]));
            NSLog(@"%d : %s(%d) : ret : %s",i,name,
                method_getNumberOfArguments(ms[i]),
                ret_type);

            free(ret_type);
        }
    }
    return 0;
}

obj-c中还有SEL和IMP的概念,真是和动态语言有的一拼鸟。
上面枚举的是类的实例方法,我们还可以枚举类方法:

NSLog(@"now query class methods :");
        ms = class_copyMethodList(object_getClass([NSArray class]),&count);
        for(int i=0;i<count;i++){
            char *ret_type = method_copyReturnType(ms[i]);
            const char *name = sel_getName(method_getName(ms[i]));
            NSLog(@"%d : %s(%d) : ret : %s",i,name,
                method_getNumberOfArguments(ms[i]),
                ret_type);
            free(ret_type);
        }

有人可能会问了:如果给类添加分类或协议的方法可以枚举出来吗?我还没试。不过很好验证,可以自己动手试一下。

相关文章
|
10月前
|
Ruby
|
10月前
|
Ruby
|
7月前
|
开发者 编解码
界面适应奥秘:从自适应布局到图片管理,Xamarin响应式设计全解析
【8月更文挑战第31天】在 Xamarin 的世界里,构建灵活且适应性强的界面是每位开发者的必修课。本文将带您探索 Xamarin 的响应式设计技巧,包括自适应布局、设备服务协商和高效图片管理,帮助您的应用在各种设备上表现出色。通过 Grid 和 StackLayout 实现弹性空间分配,利用 Device 类检测设备类型以加载最优布局,以及使用 Image 控件自动选择合适图片资源,让您轻松应对不同屏幕尺寸的挑战。掌握这些技巧,让您的应用在多变的市场中持续领先。
60 0
|
7月前
|
开发者 测试技术 Android开发
Xamarin 开发者的五大常见问题及解决方案:从环境搭建到性能优化,全面解析高效跨平台应用开发的技巧与代码实例
【8月更文挑战第31天】Xamarin 开发者常遇问题及解决方案覆盖环境搭建至应用发布全流程,助新手克服技术难关。首先需正确安装配置 Visual Studio 及 Xamarin 支持,设置 iOS/Android 测试环境。利用 Xamarin.Forms 和 XAML 实现高效跨平台开发,共享 UI 和业务逻辑代码。针对性能优化,采取减少 UI 更新、缓存计算结果等措施,复杂问题则借助 Xamarin Profiler 分析。
82 0
|
10月前
|
Ruby
|
10月前
|
Ruby
|
10月前
|
Ruby
|
10月前
|
Ruby
|
10月前
|
Ruby
|
10月前
|
Ruby