虽然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);
        }

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

最新文章

  1. Linux 中 Weblogic 启动和关闭
  2. javascript继承(三)—继承的实现原理
  3. 设置VMWARE通过桥接方式使用主机无线网卡上网(zz)
  4. 剑指OFFER之从上往下打印二叉树(九度OJ1523)
  5. localStorage存储JSON对象的小方法
  6. 快速使用shortcut,适配各种ROM
  7. ajax调用后台Java
  8. Firebug 非常好用
  9. 基于Orangpi Zero和Linux ALSA实现WIFI无线音箱(三)
  10. 卷积神经网络之LeNet
  11. java实现定时任务的三种实现方法
  12. CentOS 安装 ceph 单机版
  13. windows生成dump文件
  14. FileClassify文件日期分类工具
  15. Day Six
  16. Flask页面模板化代码片段
  17. python强大的数据类型转换
  18. C语言 &#183; 数组排序去重
  19. Dubbo -- 系统学习 笔记 -- 示例 -- 集群容错
  20. Mongodb 笔记02 创建、更新和删除文档

热门文章

  1. 5.0、Android Studio调试你的应用
  2. React Native网络请求
  3. 1068. Find More Coins (30)
  4. TDD实践感悟
  5. Android:android sdk源码中怎么没有httpclient的源码了
  6. LPSTR、LPWSTR、LPCSTR、LPCWSTR、LPTSTR、LPCTSTR的区分与转化
  7. Hadoop-1.0.4伪分布安装与配置
  8. Java:函数,类,数组之间的运用
  9. sublime test2 快捷键
  10. 小强的HTML5移动开发之路(18)——HTML5地理定位