iOS_Runtime
2016-07-22 16:04
316 查看
Objective_C是一门动态语言,它把很多静态语言在编译和链接时做的事情放到了运行时去处理,在运行时实现了对类、方法、成员变量、属性等信息的管理机制,这一套机制为我们开发提供了极大的灵活性==》Runtime。
Runtime是一个用C和汇编语言写的动态库,利用它,我们可以做的事情有很多。下面一起来看一下:
在学习Runtime之前,有必要先知道几个数据结构:
1.类的数据结构,着重关注红圈的几个字段
2.类的实例的数据结构
3.Runtime提供了非常多的方法来进行各种操作。下面我们通过简单实例来使用一些常用操作。
首先创建如下Person类:
再看如下代码:
结果如下:
==》通过上面两个数据结构我们知道,类的实例变量有个isa指针,指向该实例所属类,即Person类,而Person类有个superclass指针,指向其父类,即NSObject。很好理解。
4.接下来我们获取一下类的成员变量,属性,方法,协议
1)获取类的成员变量
2) 获取类的属性
==》这里多说一点:本质上一个属性背后必然对应着一个成员变量,但是属性又不仅仅只是一个成员变量,属性还会根据自己对应的属性特性的定义来对这个成员变量进行一系列的封装:提供 Getter/Setter 方法、内存管理策略、线程安全机制等等。
3)获取类的方法 (方法必须要有具体实现)
4)获取某类遵守的协议
就先讲这些比较基本的吧,就是通过Runtime获取一个类的成员变量,属性,方法,遵守的协议。当我们得到这些东西后,接下来就可以“ 随心所欲”了。下一篇博客将会讲解如何动态创建一个类,如何动态添加/修改成员变量和属性,如何动态添加/修改/替换方法,以及一些注意事项。
Runtime是一个用C和汇编语言写的动态库,利用它,我们可以做的事情有很多。下面一起来看一下:
在学习Runtime之前,有必要先知道几个数据结构:
1.类的数据结构,着重关注红圈的几个字段
2.类的实例的数据结构
3.Runtime提供了非常多的方法来进行各种操作。下面我们通过简单实例来使用一些常用操作。
首先创建如下Person类:
再看如下代码:
结果如下:
==》通过上面两个数据结构我们知道,类的实例变量有个isa指针,指向该实例所属类,即Person类,而Person类有个superclass指针,指向其父类,即NSObject。很好理解。
4.接下来我们获取一下类的成员变量,属性,方法,协议
1)获取类的成员变量
2) 获取类的属性
==》这里多说一点:本质上一个属性背后必然对应着一个成员变量,但是属性又不仅仅只是一个成员变量,属性还会根据自己对应的属性特性的定义来对这个成员变量进行一系列的封装:提供 Getter/Setter 方法、内存管理策略、线程安全机制等等。
3)获取类的方法 (方法必须要有具体实现)
4)获取某类遵守的协议
就先讲这些比较基本的吧,就是通过Runtime获取一个类的成员变量,属性,方法,遵守的协议。当我们得到这些东西后,接下来就可以“ 随心所欲”了。下一篇博客将会讲解如何动态创建一个类,如何动态添加/修改成员变量和属性,如何动态添加/修改/替换方法,以及一些注意事项。
相关文章推荐
- iOS-OC-提交审核:Missing Push Notification Entitlement
- iOS BLe
- iOS 调试接口时候 报错,不能联网
- 关于iOS生命周期和前后台的切换
- iOS - 封装自己的slider
- iOS - 重写set和get方法后,为什么使用时会发生无效?解析命名规范
- iOS7 StatusBar 使用小结
- ios 下拉刷新,下拉加载数据 利用第三方
- 用CocoaPods做iOS程序的依赖管理
- ios常用的第三方类库
- iOS---五颗星评分效果编程(详解)
- ios基本语法
- iOS开发之制作@2x和缩小图片
- iOS基础篇
- 解决Alamofire库在iOS7下设置Head无效的问题
- iOS开发masonry的一些使用简介
- 快速集成iOS基于RTMP的视频推流
- iOS 真机调试(无需证书)
- iOS和html5交互遇到的问题
- NSNotification多次执行的问题