objective-c中类似ruby枚举类的实例方法
2024-08-31 06:46:48
虽然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);
}
有人可能会问了:如果给类添加分类或协议的方法可以枚举出来吗?我还没试。不过很好验证,可以自己动手试一下。
最新文章
- Linux 中 Weblogic 启动和关闭
- javascript继承(三)—继承的实现原理
- 设置VMWARE通过桥接方式使用主机无线网卡上网(zz)
- 剑指OFFER之从上往下打印二叉树(九度OJ1523)
- localStorage存储JSON对象的小方法
- 快速使用shortcut,适配各种ROM
- ajax调用后台Java
- Firebug 非常好用
- 基于Orangpi Zero和Linux ALSA实现WIFI无线音箱(三)
- 卷积神经网络之LeNet
- java实现定时任务的三种实现方法
- CentOS 安装 ceph 单机版
- windows生成dump文件
- FileClassify文件日期分类工具
- Day Six
- Flask页面模板化代码片段
- python强大的数据类型转换
- C语言 &#183; 数组排序去重
- Dubbo -- 系统学习 笔记 -- 示例 -- 集群容错
- Mongodb 笔记02 创建、更新和删除文档