runtime

c++11 异常处理

冷暖自知 提交于 2020-02-05 06:17:32
概要 异常是程序执行期产生问题,比如尝试除以零的操作。 异常提供了一种转移程序控制权的方式。C++ 异常处理涉及到三个关键字: try 、 catch 、 throw 。 throw: 当问题出现,程序通过throw抛出一个异常。 catch: 在你想要处理问题的地方,通过异常处理程序捕获异常。 try: try 块中的代码标识将被激活的特定异常。它后面允许跟着一个或多个 catch 块。 使用 try/catch 语句的语法: try { // 保护代码 } catch( ExceptionName e1 ) { // catch 块 } catch( ExceptionName e2 ) { // catch 块 } catch( ExceptionName eN ) { // catch 块 } 如果 try 块在不同场景抛出不同异常,此时可尝试罗列多个 catch 语句,用于捕获不同类型异常。 抛出异常 使用 throw 语句在代码块中任何位置抛出异常。throw 语句的操作数可以是任意表达式,表达式的结果类型决定了抛出异常的类型。 示例: double division(int a, int b) { if( b == 0 ) { throw "Division by zero condition!"; } return (a/b); } 捕获异常 catch 块跟在

谷歌Coral USB Accelerator最新安装使用指南

為{幸葍}努か 提交于 2020-02-04 15:37:25
谷歌Coral USB加速器是一种USB设备,提供Edge TPU作为计算机的协处理器。 当连接到Linux,Mac或Windows主机时,它可以加快机器学习模型的推理速度。 你需要做的就是在连接USB Accelerator的计算机上下载Edge TPU运行时和TensorFlow Lite库。 然后,使用示例应用程序执行图像分类。 系统要求: 具有以下操作系统之一的计算机: ·Linux Debian 6.0或更高版本,或其任何派生版本(例如Ubuntu 10.0+),以及x86-64或ARM64系统架构(支持Raspberry Pi,但我们仅测试了Raspberry Pi 3 Model B +和Raspberry Pi 4) ·安装了MacPorts或Homebrew的macOS 10.15 ·Windows 10 -一个可用的USB端口(为获得最佳性能,请使用USB 3.0端口) -Python 3.5、3.6或3.7 操作流程 一、 安装Edge TPU runtime 需要Edge TPU runtime才能与Edge TPU通信。 你可以按照以下说明在主机,Linux,Mac或Windows上安装它。 1、Linux系统 1)将官方提供的Debian package添加到你的系统中: 2)安装Edge TPU runtime: 使用随附的USB 3.0电缆将USB

Deleting TFrame from form at run time

我只是一个虾纸丫 提交于 2020-02-04 11:50:11
问题 I am using C++ Builder to create a VCL form application. Right now I have a TFrame containing a bunch of components and it looks like this... I also have a button call "Add". Basically every time I press that Add button on the form, a new TFrame is added to it and below the previous one making something that looks like a table. And in order to add duplicates I have to rename the TFrame each time before it is created. int __fastcall TForm1::AddMapCells(void) { Num++; TFrame1 * MyFrame = new

Runtime之IMP指针,isa指针

余生颓废 提交于 2020-02-04 00:27:32
要了解 isa 指针先了解下类的定义 在xcode中用快捷键Shift+Cmd+O 搜索objc.h 能看到类的定义: 了解 Paste_Image.png 可以看出: objc_object:Objective-C对对象的定义, 其质上是结构体对象,其中 isa是它唯一的私有成员变量,即所有对象都有isa指针 Class 是一个 objc_class 结构类型的指针 id是一个 objc_object 结构类型的指针,这也是id可以指向任何对象的原因 SEL(方法选择器)是一个objc_selector结构类型的指针 IMP 先不提 再搜runtime.h Paste_Image.png 每个对象结构体的首个成员是Class类的变量,该变量定义了对象所属的类,通常称为isa指针 super_class:父类,如果该类已经是最顶层的根类,那么它为NULL。 version:类的版本信息,默认为0 info:供运行期使用的一些位标识。 instance_size:该类的实例变量大小 ivars:成员变量的数组 struct objc_method_list **methodLists OBJC2_UNAVAILABLE : 方法列表,类目就是通过它添加方法的 struct objc_cache *cache OBJC2_UNAVAILABLE : 方法缓存

iOS 认识runtime 中的三个指针 isa , IMP , SEL

左心房为你撑大大i 提交于 2020-02-04 00:26:11
runtime中函数调用经常被提及的三个概念 isa,IMP,SEL 一 isa: 是类指针,之所以说 isa 是指针是因为 Class 其实是一个指向 objc_class 结构体的指针,而isa 是它唯一的私有成员变量,即所有对象都有isa指针(isa位置在成员变量第一个位置) //打开 runtime.h文件可看到下面的类的结构体详情内容struct objc_class { Class _Nonnull isa OBJC_ISA_AVAILABILITY;//这个就是上面说的 每个对象都有isa指针 在结构体指针中第一个成员变量的位置上 #if !__OBJC2__ Class _Nullable super_class /*父类*/ const char * _Nonnull name /*类名*/ long version /*版本信息*/ long info /*类信息*/ long instance_size /*实例大小*/ struct objc_ivar_list * _Nullable ivars /*实例参数链表*/ struct objc_method_list * _Nullable * _Nullable methodLists /*方法链表*/ struct objc_cache * _Nonnull cache          /*方法缓存*/

OC的runtime运行机制

ぐ巨炮叔叔 提交于 2020-02-04 00:25:36
什么是runtime runtime就是一套底层的c语言API(Application Programming Interface)里面包括很多强大实用的c语言类型、c语言函数。 实际上,平时我们编写的oc代码,底层都是基于runtime实现的。 也就是说我们平时编写的oc代码最终都是转成了底层的runtime代码(c语言代码) 。 [obj say] —> 调用id objc_msgSend(id self, SEL op, ...)函数 -> 里面的obj.isa指针-> class -> class.cache_List -> class.Method_List -> superClass 例如 [obj say] ; 像这样对象执行一个方法的时候转成了runtime库里面的C语言函数即 objc_msgSend(objc, @selector(say)) 内部对象寻找到方法并执行的具体步骤: MRC开发环境下 1.先检查 @selector 方法是否可以省略 2.检查 target(目标对象objc) 是否为 nil,如果为 nil 就 clearout 并直接 return 3.找到 target 对应的class,然后根据 @selector 找到IMP(函数指针) 4.先从当前class的一个方法名叫cache_List缓存列表去找,找到就跳到对应的IMP实现方法

ios runtime(1)

人走茶凉 提交于 2020-02-04 00:25:07
import import 我们前面已经讲过一篇runtime 原理,现在这篇文章主要介绍的是runtime是什么以及怎么用!希望对读者有所帮助! 首先,第一个问题, 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”) 第二个问题 runtime 用来干什么呢??用在那些地方呢?怎么用呢? runtime是属于OC的底层, 可以进行一些非常底层的操作(用OC是无法现实的, 不好实现) 在程序运行过程中, 动态创建一个类(比如KVO的底层实现) 在程序运行过程中, 动态地为某个类添加属性\方法, 修改属性值\方法 遍历一个类的所有成员变量(属性)\所有方法 例如:我们需要对一个类的属性进行归档解档的时候属性特别的多,这时候,我们就会写很多对应的代码

runtime的意义

泄露秘密 提交于 2020-02-04 00:17:55
runtime:是运行时机制,oc特有 编译时:不会检查方法是否真实实现 运行时:才会知道 c语言不同:编译时就知道 具体实现: Person*p=[Person alloc]init] [p eat]; 调用方法的本质是:消息发送机制,运行时机制 底层实现是: [p performSelector:@selector(eat)]; 它的再底层是: runtime运行时代码 objc_msgSend(p,@selector(eat)); objc_msgSend([person class],@selector(eat)); 方法交换: class_getClassMethods([UIImage class],@selector(imageNamed)); class_getClassMethods([UIImage class],@selector(xm_imageNamed)); class_exchangeIMpleation(methods1,methods2) 运行时添加方法: [self performSelector:@selector(run)];run方法未实现 +(bool)resloveWithInstance:sel { if (sel=@selector(eat)) class_addMethods([self class],sel,aaaa,"v@:"

Runtime-iOS运行时基础篇

孤街浪徒 提交于 2020-02-04 00:16:54
转自:https://www.jianshu.com/p/d4b55dae9a0d   本文主要整理了Runtime的相关知识。对于一个iOS开发者来说,掌握Runtime的重要性早已不言而喻。OC能够作为一门优秀的动态特性语言,在其背后默默工作着的就是Runtime。在网上也看过很多资料,最终我还是希望在一些关键的知识点上能够融入自己的理解,从简单的问题出发,一步一步理解和学以致用。 iOS运行时Runtime.png 相关文章:iOS运行时Runtime应用 目录: 一、怎么理解OC是动态语言,Runtime又是什么? 二、理解消息机制的基本原理 三、与Runtime交互的三种方式 四、分析Runtime中的数据结构 五、深入理解Rutime消息发送原理 六、多继承的实现思路:Runtime 七、最后总结 一、怎么理解OC是动态语言,Runtime又是什么? 静态语言 :如C语言,编译阶段就要决定调用哪个函数,如果函数未实现就会编译报错。 动态语言 :如OC语言,编译阶段并不能决定真正调用哪个函数,只要函数声明过即使没有实现也不会报错。 我们常说OC是一门动态语言,就是因为它总是把一些决定性的工作从编译阶段推迟到运行时阶段。OC代码的运行不仅需要编译器,还需要运行时系统(Runtime Sytem)来执行编译后的代码。 Runtime是一套底层纯C语言API

Runtime-iOS运行时应用篇

你离开我真会死。 提交于 2020-02-04 00:16:10
一、动态方法交换:Method Swizzling 实现动态方法交换(Method Swizzling )是Runtime中最具盛名的应用场景,其原理是:通过Runtime获取到方法实现的地址,进而动态交换两个方法的功能。使用到关键方法如下: //获取类方法的Mthod Method _Nullable class_getClassMethod(Class _Nullable cls, SEL _Nonnull name) //获取实例对象方法的Mthod Method _Nullable class_getInstanceMethod(Class _Nullable cls, SEL _Nonnull name) //交换两个方法的实现 void method_exchangeImplementations(Method _Nonnull m1, Method _Nonnull m2) 1.动态方法交换示例 现在演示一个代码示例:在视图控制中,定义两个实例方法printA与printB,然后执行交换 - (void)printA{ NSLog(@"打印A......"); } - (void)printB{ NSLog(@"打印B......"); } //交换方法的实现,并测试打印 Method methodA = class_getInstanceMethod([self