Runtime

本文深入探讨了Objective-C运行时(runtime)的概念及其在iOS开发中的应用。runtime是一系列底层C语言API,允许开发者在运行时动态创建类、添加属性和方法,广泛应用于性能优化、动态类型检查和反射机制中。

runtime应用的时机: 
1> 当需要非常高的性能开发时,使用runtime,注释:oc的代码已经无法满足性能需求 
2> 当我们对系统内部的实现很好奇的时候,可以用clang反编译成c++去看底层的实现机制!

1. runtime实现的机制是什么,怎么用,一般用于干嘛? 
runtime是一套比较底层的纯C语言API, 属于1个C语言库, 包含了很多底层的C语言API。 
在我们平时编写的OC代码中, 程序运行过程时, 其实最终都是转成了runtime的C语言代码, runtime算是OC的幕后工作者 
比如说,下面一个创建对象的方法中, 
举例: 
OC : 
[[MJPerson alloc] init] 
runtime : 
objc_msgSend(objc_msgSend(“MJPerson” , “alloc”), “init”)

2.  runtime 用来干什么呢??用在那些地方呢?怎么用呢? 

runtime是属于OC的底层, 可以进行一些非常底层的操作(用OC是无法现实的, 不好实现)

    • 在程序运行过程中, 动态创建一个类(比如KVO的底层实现)

    • 在程序运行过程中, 动态地为某个类添加属性\方法, 修改属性值\方法

    • 遍历一个类的所有成员变量(属性)\所有方法 
      例如:我们需要对一个类的属性进行归档解档的时候属性特别的多,这时候,我们就会写很多对应的代码,但是如果使用了runtime就可以动态设置!

   目前,iOS中运用runtime最普遍的是反射机制

      反射机制  :将两个对象的所有属性,用动态的方式取出来,并根据属性名,自动绑值。

      关联等(貌似不经常用)。

      关联是指把两个对象相互关联起来,使得其中的一个对象作为另外一个对象的一部分 :objc_setAssociatedObject。

以下几篇文章讲的很详细

http://my.oschina.net/panyong/blog/297640

http://my.oschina.net/panyong/blog/298631

http://www.cocoachina.com/ios/20141031/10105.html

http://www.cocoachina.com/ios/20141105/10134.html

http://www.cocoachina.com/ios/20141106/10150.html

建议可以运用反射机制来体会runtime。

转载于:https://www.cnblogs.com/xing-li/p/4505243.html

Unity Runtime相关工具在游戏开发等领域有重要作用,以下为你详细介绍: ### 1. Unity Runtime Inspector Unity Runtime Inspector是专为Unity 3D设计的运行时检查器和层次结构工具,支持在游戏运行期间进行调试和实时编辑。它兼容Unity支持的各种平台,包括移动设备,并且提供了高度优化的界面来减少垃圾回收(GC)产生的影响 [^1]。 ### 2. Unity - Runtime - Animation - Recorder #### 项目介绍 Unity - Runtime - Animation - Recorder是一款能够在Unity运行时记录动画的工具,它可以将动画保存为.anim、Maya .ma或FBX ASCII格式。该工具使得用户可以充分利用Unity的高效性能和脚本控制优势,快速录制并导出动画 [^4]。 #### 功能特性 - 实时记录Unity中的动画。 - 支持导出为.anim、Maya .ma以及FBX ASCII格式。 - 高度集成,安装简便。 - 提供示例DemoAssets供用户参考学习 [^4]。 #### 项目目录结构 ``` Unity - Runtime - Animation - Recorder/ ├── DemoAssets/ │ ├── DemoAssets.meta │ └── ... ├── Unity Runtime Recorder/ │ ├── Scripts/ │ │ ├── UnityAnimSaver/ │ │ │ └── UnityAnimationRecorder.cs │ │ └── ... │ ├── Unity Runtime Recorder.meta │ └── ... ├── LICENSE.md ├── README.md └── ... ``` #### 目录介绍 - DemoAssets:包含示例资源文件,用于演示项目的功能。 - Unity Runtime Recorder:核心文件夹,包含项目的脚本和其他资源。 - Scripts:包含项目的所有脚本文件。 - UnityAnimSaver:包含用于录制和保存动画的核心脚本UnityAnimationRecorder.cs。 - LICENSE.md:项目的许可证文件。 - README.md:项目的说明文档 [^2]。 ### 3. Unity UIToolkit在Runtime模式使用 在Runtime模式下使用Unity UIToolkit时,所制作的uxml文件可以同时在Editor和Runtime模式使用。以下是Runtime模式下绑定事件的示例代码: ```csharp public class UIRuntime : MonoBehaviour { //获取UIDocument和rootVisualElement private UIDocument uid; private VisualElement uxmlVE; //测试对象 private UIToolkitSampleRuntime sample; void Start() { //初始化...... sample = new UIToolkitSampleRuntime(); uid = GetComponent<UIDocument>(); uxmlVE = uid.rootVisualElement; //绑定事件 uxmlVE.Q<TextField>("TextF").RegisterValueChangedCallback(value => { sample.m_discribe = value.newValue; }); uxmlVE.Q<Button>("SetData").clicked += SetData_clicked; } private void SetData_clicked() { string temp = sample.m_discribe; uxmlVE.Q<Statusbar>().SetDiscribe(temp); } } ``` 此代码展示了在Runtime模式下获取UI元素并绑定事件的基本方法 [^5]。 ### 4. Unity取消Runtime费用 Unity将取消游戏的Runtime费用并实施定价调整,目的是继续投入资源,改进每个人的游戏开发体验,同时成为更好的合作伙伴 [^3]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值