OC是一门 动态语言。

问题来了。什么是动态语言? 与之相对的静态语言?

学习C++的时候,记得一个名词:“运行时的动态绑定”。 这个是 “多态”的概念。

简单提一下:关键:类指针可以指向本类,或者其子类。  当该类调用(虚函数)函数, 真正调用的是子类,还是本类? 是在其运行期间看该 指针指向内存 真正的存储类型。 这是在运行期间做的,在编译期间做不到。

这只是“运行时动态绑定”或者叫做“多态”的概念,并不是 “动态语言” 的特性!

动态语言:指程序在运行期间,对象的函数、对象的变量 可以被更改!

其中最常用的:

1,获取成员变量的名字(nsstring)

unsigned int numIvars; //成员变量个数
Ivar *vars = class_copyIvarList(NSClassFromString(@"UIView"), &numIvars);
//Ivar *vars = class_copyIvarList([UIView class], &numIvars); NSString *key=nil;
for(int i = ; i < numIvars; i++) { Ivar thisIvar = vars[i];
key = [NSString stringWithUTF8String:ivar_getName(thisIvar)]; //获取成员变量的名字
NSLog(@"variable name :%@", key);
key = [NSString stringWithUTF8String:ivar_getTypeEncoding(thisIvar)]; //获取成员变量的数据类型
NSLog(@"variable type :%@", key);
}
free(vars);
- (NSString *)nameWithInstance:(id)instance
{
unsigned int numIvars = ;
NSString *key=nil;
Ivar * ivars = class_copyIvarList([self.target class], &numIvars);
for(int i = ; i < numIvars; i++) {
Ivar thisIvar = ivars[i];
const char *type = ivar_getTypeEncoding(thisIvar);
NSString *stringType = [NSString stringWithCString:type encoding:NSUTF8StringEncoding];
if (![stringType hasPrefix:@"@"]) {
continue;
}
if ((object_getIvar(self.target, thisIvar) == instance)) {
key = [NSString stringWithUTF8String:ivar_getName(thisIvar)];
break;
}
}
free(ivars);
return key; }

2获取运行时的函数名称

Method *meth = class_copyMethodList(NSClassFromString(@"UIView"), &numIvars);

    //Method *meth = class_copyMethodList([UIView class], &numIvars);

    for(int i = ; i < numIvars; i++) {

        Method thisIvar = meth[i];

        SEL sel = method_getName(thisIvar);

        const char *name = sel_getName(sel);

        NSLog(@"zp method :%s", name);

    }

    free(meth);

参考

http://my.oschina.net/taptale/blog/110626

http://www.th7.cn/Program/IOS/201406/213919.shtml

 

什么是动态语言 OC 的runtime的更多相关文章

  1. oc是一个全动态语言,oc的一切都是基于runtime实现的!

    oc是一个全动态语言,oc的一切都是基于runtime实现的! 从以下三方面来理解runtime吧! 1. 传统的面向过程的语言开发,例如c语言.实现c语言编译器很简单,只要按照语法规则实现一个LAL ...

  2. 02. oc语言是动态语言

    参照着知乎上大神们给的解释,(https://www.zhihu.com/question/19918532)自己要总结下知识: 自己初级并没有理解 动态.静态.强类型.弱类型 语言的这些含义,区分. ...

  3. 为什么可以说Java语言是准动态语言?

    什么是动态语言? 动态语言,是指程序在运行时可以改变其结构:新的函数可以被引进,已有的函数可以被删除等在结构上的变化.比如JavaScript便是一个典型的动态语言. 除此之外如Ruby.Python ...

  4. C# 动态语言特性,dynamic 关键字研究

    1       动态语言简介 支持动态特性的语言现在大行其道,并且有继续增长的趋势.比如 Ruby 和 Python, 还有天王级的巨星 --- JavaScript. 现在一个程序员说自己对 Jav ...

  5. iOS 推荐几篇关于Objective-c 动态语言的文章

    http://www.cnblogs.com/Mr-Lin/p/5771969.html https://onevcat.com/2012/04/objective-c-runtime/ 我摘抄几句比 ...

  6. OC中Runtime浅析

    近期了解了一下OC的Runtime,真的是OC中非常强大的一个机制,看起来比較底层,但事实上能够有非常多活用的方式. 什么是Runtime 我们尽管是用Objective-C写的代码,事实上在运行过程 ...

  7. 是否含有RTTI(运行时类型信息)是动态语言与静态语言的主要区别

    运行时类型信息代表类型信息和对内存的操作能力. 运行时类型信息是运行时系统的基础. 类型信息分为编译时类型信息和运行时类型信息两种: 静态语言的类型信息只在编译时使用和保留,在可执行文件中没有类型信息 ...

  8. Objective-C 是动态语言

    Objective-C 的动态性是由 runtime 相关的库赋予的. 当然其他语言也完全可以运行在一个 Runtime 库上而获得动态性,由于多数高级语言的诞生都对应着一种编译器,因此将编译器的特性 ...

  9. 关于使用动态语言运行时 (. net)

    AutoCAD Managed .NET API允许您使用使用. NET 4.0 引入的动态语言运行时 (DLR). 使用DLR可以直接访问对象, 而无需: 打开一个对象进行读取或写入, 然后在完成后 ...

随机推荐

  1. mongodb3.03开启认证

    原文地址:http://21jhf.iteye.com/blog/2216103 下载了最新mongodb3.03版本,当使用--auth 参数命令行开启mongodb用户认证时遇到很多问题,现总结如 ...

  2. C产品狗

    作者:郭琦链接:https://www.zhihu.com/question/29342383/answer/110823046来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明 ...

  3. 使用BlockingQueue的生产者消费者模式

    BlockingQueue很好的解决了多线程中,如何高效安全“传输”数据的问题.通过这些高效并且线程安全的队列类,为我们快速搭建高质量的多线程程序带来极大的便利.使用场景. 首先它是一个队列,而一个队 ...

  4. NeHe OpenGL教程 第十三课:图像字体

    转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...

  5. Tornado (and Twisted) in the age of asyncio》

    Tornado (and Twisted) in the age of asyncio>

  6. linux命令(13) 删除指定文件夹下后缀名相同的文件

    方法一: find 目录 -name "*.abc" | xargs rm命令有点危险,可以先执行前半段,看看是不是你要删除的文件, 然后再整条执行 方法二:find . -nam ...

  7. HTML5 编辑 API 之 Range 对象(一)

     一.Range 对象基本概念 通过使用 Range 对象所提供的方法实现一个鼠标选取内容,通过点击按钮打印出选中内容,当然注意在不同的浏览器下可选中的内容数量是不同的. <!DOCTYPE h ...

  8. 转-Activity中使用orientation属性讲解及需注意的问题

    http://www.software8.co/wzjs/yidongkaifa/6504.html 今天遇到了一个关于orientation的问题查了点资料记录一下,只有点点滴滴的积累,才能让我们更 ...

  9. HDFS的运行原理(转)

    简介 HDFS(Hadoop Distributed File System )Hadoop分布式文件系统.是根据google发表的论文翻版的.论文为GFS(Google File System)Go ...

  10. 安装java开发环境jdk,安装JDK

    JDK可以理解为翻译官,它将Java高级语言翻译为二进制执行. JDK可以编译文件,编译后的文件扩展名为.class. 只要能支持JDK的地方,JAVA就可以运行,这就是JAVA跨平台的性质. 我的是 ...