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. (C#) 引用工程中发现有黄色叹号

    一个Project 引用 另外 一个Project 显示黄色叹号,后来发现 后一本Project的build设定为.Net4.5, 前一个为4.0, 将版本改为一致后,问题解决.

  2. Hadoop使用lzo压缩格式

    在hadoop中搭建lzo环境: wget http://www.oberhumer.com/opensource/lzo/download/lzo-2.06.tar.gz export CFLAGS ...

  3. PLSQL_Oracle外部表的概念和使用(案例)

    2014-08-25 Created By BaoXinjian

  4. NeHe OpenGL教程 第二课:多边形

    前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线教程的编写,以及yarn的翻译整理表示感谢 ...

  5. "运行时"如何解析类型引用

    先将下面的代码保存到文本中,存放到一个目录下面,E:\aa.txt public sealed class Program{ public static void Main(){ System.Con ...

  6. iis7 500错误日志报 LOG_FILE_MAX_SIZE_TRUNCATE

    参考:http://blogs.iis.net/robert_mcmurray/freb-log-file-max-size-truncate cd /d "%windir%\system3 ...

  7. 基于jquery的表单校验插件 - formvalidator使用体验

    下载地址:http://www.formvalidator.net/ 基本样例 <form action="/registration" method="POST& ...

  8. vim使用快捷键

    vim使用快捷键 索引 1. 关于Vim 1.1 Vim的几种模式 2. 启动Vim 3. 文档操作 4. 光标的移动 4.1 基本移动 4.2 翻屏 4.3 标记 5. 插入文本 5.1 基本插入 ...

  9. ylbtech-dbs:ylbtech-PurpleBill(票据管理系统)

    ylbtech-dbs:ylbtech-PurpleBill(票据管理系统) -- =============================================-- DatabaseNa ...

  10. OOP三个基本特征:封装、继承、多态

    面向对象的三个基本特征是:封装.继承.多态. 封装 封装最好理解了.封装是面向对象的特征之一,是对象和类概念的主要特性. 封装,也就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类 ...