iOS runtime (1)

iOS Runtime理解和应用场景 为了关联属性和其对应的存取方法,需要定义一个全局唯一的键值。 阅读详情

一些公用类:

@interface CustomClass : NSObject

- (void) fun1;

@end


@implementation CustomClass

- (void) fun1

{

    NSLog(@"fun1");

}

@end


@interface TestClass : NSObject

@end

@implementation TestClass

@end


别忘记引入库:#include<objc/runtime.h>


1、对象拷贝:id object_copy(id obj, size_t size)

- (void) copyObj

{

    CustomClass *obj = [CustomClassnew];

    NSLog(@"%p", &obj);

    

    id objTest = object_copy(obj,sizeof(obj));

    NSLog(@"%p", &objTest);


    [objTest fun1];

}

打印结果:

2013-07-26 15:35:11.547 HighOC[6859:c07] 0xbfffdf64

2013-07-26 15:35:11.547 HighOC[6859:c07] 0xbfffdf60

2013-07-26 15:35:11.547 HighOC[6859:c07] fun1


说明:

object_copy 函数实现了对象的拷贝。

2、对象释放 id object_dispose(id obj)


- (void) objectDispose

{

    CustomClass *obj = [CustomClassnew];

    object_dispose(obj);

    

    [obj release];

    [obj fun1];

}

打印结果:程序crash

malloc: *** error for object 0x758e6d0: pointer being freed was not allocated


3、更改对象的类/获取对象的类  

Class object_setClass(id obj, Class cls)  / 

Class object_getClass(id obj)

- (void) setClassTest

{

    CustomClass *obj = [CustomClassnew];

    [obj fun1];

    

    Class aClass =object_setClass(obj, [CustomClassOtherclass]);

    //obj 对象的类被更改了    swap the isa to an isa

    NSLog(@"aClass:%@",NSStringFromClass(aClass));

    NSLog(@"obj class:%@",NSStringFromClass([objclass]));

    [obj fun2];

}

- (void) getClassTest

{

    CustomClass *obj = [CustomClassnew];

    Class aLogClass =object_getClass(obj);

    NSLog(@"%@",NSStringFromClass(aLogClass));

}


4、获取对象的类名  constchar *object_getClassName(id obj)


- (void) getClassName

{

    CustomClass *obj = [CustomClassnew];

    NSString *className = [NSStringstringWithCString:object_getClassName(obj)encoding:NSUTF8StringEncoding];

    NSLog(@"className:%@", className);

}


5、给一个类添加方法  

BOOL class_addMethod(Class cls,SEL name,IMP imp, 

const char *types)



/**

  * 一个参数

  *

  */


int cfunction(id self, SEL _cmd, NSString *str) {

    NSLog(@"%@", str);

    return10;//随便返回个值

}


- (void) oneParam {

    

    TestClass *instance = [[TestClassalloc]init];

    //    方法添加

    class_addMethod([TestClassclass],@selector(ocMethod:), (IMP)cfunction,"i@:@");

    

    if ([instance respondsToSelector:@selector(ocMethod:)]) {

        NSLog(@"Yes, instance respondsToSelector:@selector(ocMethod:)");

    } else

    {

        NSLog(@"Sorry");

    }

    

    int a = (int)[instanceocMethod:@"我是一个OC的method,C函数实现"];

    NSLog(@"a:%d", a);

}


 /**

  * 两个参数

  *

  */


int cfunctionA(id self, SEL _cmd, NSString *str, NSString *str1) {

    NSLog(@"%@-%@", str, str1);

    return20;//随便返回个值

}


- (void) twoParam {

    

    TestClass *instance = [[TestClassalloc]init];

    

    class_addMethod([TestClassclass],@selector(ocMethodA::), (IMP)cfunctionA,"i@:@@");

    

    if ([instance respondsToSelector:@selector(ocMethodA::)]) {

        NSLog(@"Yes, instance respondsToSelector:@selector(ocMethodA::)");

    } else

    {

        NSLog(@"Sorry");

    }

    

    int a = (int)[instanceocMethodA:@"我是一个OC的method,C函数实现" :@"-----我是第二个参数"];

    NSLog(@"a:%d", a);

}


相关文档及说明:

Obj-C的方法(method)就是一个至少需要两个参数(self,_cmd)的C函数

 

 IMP有点类似函数指针,指向具体的Method实现。

 

 

 向一个类动态添加方法


 BOOL class_addMethod(Class cls, SEL name, IMP imp, const char *types)

 参数说明:

 cls:被添加方法的类

 name:可以理解为方法名

 imp:实现这个方法的函数

 types:一个定义该函数返回值类型和参数类型的字符串

 

 

 

 class_addMethod([TestClass class], @selector(ocMethod:), (IMP)testFunc, "i@:@");

 

 其中types参数为"i@:@“,按顺序分别表示:

 i:返回值类型int,若是v则表示void

 @:参数id(self)

 ::SEL(_cmd)

 @:id(str)

 

 

 官方文档:

 

 https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/ObjCRuntimeRef/Reference/reference.html

 https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/ObjCRuntimeGuide/Articles/ocrtTypeEncodings.html

【移动产品】ArcGIS Runtime SDK for iOS的新版本10.1.1发布 内容提要 1、新版的iOS SDK更名又发生了变化,为什么要更名呢,请看博文; 2、新版iOS SDK又带来了哪些可喜的变化,请看博文; 3、旧版应用如何迁移至新版本,请看博文。 为何更名?         很高兴在新年发布ArcGIS Runtime SDKfor iOS的新版本10.1.1,更新内容包括:支持高级军事符号、支持PKI客户端验证的安全链接、位置定 阅读详情

相关推荐

ns-v8ios-runtime:使用V8引擎的NativeScript iOS运行时

入门 要开始进入v8 iOS运行时,请确保已安装XCode和 ,然后运行以下命令 # Clone repo git clone https://github.com/NativeScript/ns-v8ios-runtime.git # Install CMake and LLVM (8) brew install cmake llvm@8 # Open the runtime in XCode cd ns-v8ios-runtime open v8ios.xcodeproj 选择TestRunner目标和一个仿真器,然后单击Run(播放按钮)。 这需要一段时间,但是一旦构建,仿真器应启动

iOS底层 Runtime深入理解

前言 Runtime是近年来面试遇到的一个高频方向,也是我们平时开发中或多或少接触的一个领域,那么什么是runtime呢?它又可以用来做什么呢? 什么是Runtime?平时项目中有用过么? OC是一门动态性比较强的编程语言,允许很多操作推迟到程序运行时再进行 OC的动态性就是由Runtime来支撑和实现的,Runtime是一套C语言的API,封装了很多动 态性相关的函数 平时编写的OC代码,底层都是转换成了Runtime API进行调用 具体应用 利用关联对象(AssociatedObject)给分类

Rey的技术博客 2487

Cadence IC5141保姆级教程:Bandgap电路四大仿真(稳定性/噪声/启动/PSRR)完整流程与调参心得

本文提供Cadence IC5141中Bandgap电路的四大仿真(稳定性仿真、噪声仿真、启动仿真、PSRR仿真)的完整流程与调参心得。从原理图检查到ADE L配置,详细解析各仿真步骤的关键参数设置与优化策略,帮助工程师高效完成电路设计与性能调优。

weixin_30399821的博客 1649

【iOS】——Runtime学习

iOS的Runtime,通常称为Objective-C Runtime,是一个C语言库,包含了很多底层的纯C语言API。,它是Objective-C语言动态特性的基石。这个系统在程序运行时提供了一系列强大的功能,允许我们在应用运行过程中动态地操作类和对象,执行诸如检查和改变对象、交换方法实现、动态添加方法或属性等操作。高级编程语言想要成为可执行文件需要先编译为汇编语言再汇编为机器语言,机器语言也是计算机能够识别的唯一语言,但是OC并不能直接编译为汇编语言,而是要先转写为纯C语言再进行编译和汇编的操作,

m0_73974920的博客 2735

Google AdSense收款前必做:W-8BEN税务认证的3个关键选择与1个提交时机小技巧

本文深入解析Google AdSense收款前必须完成的W-8BEN税务认证,重点介绍账号类型选择、特殊税率勾选、美国活动界定等3个关键决策,并分享提交时机的小技巧,帮助站长高效通过审核,确保广告收入顺利到账。

weixin_30443731的博客 671

Kalibr标定避坑指南:如何用AprilGrid板快速完成双目IMU标定

本文详细介绍了使用AprilGrid板进行Kalibr双目IMU联合标定的实战技巧,包括标定工具选型、数据采集优化、标定流程及结果验证。通过AprilGrid板的唯一标识性和抗遮挡优势,结合IMU静止标定和运动激励设计,显著提升标定精度。文章还提供了常见报错处理和高级优化技巧,帮助开发者高效完成传感器标定。

sunny的博客 279

iOS开发之Runloop和Runtime

RunLoop 对于一个iOS开发者,如果你的水平只是停留在会用API的级别,那说明你与大神还是慢慢长路,本文章大家一块学习一些深层次的东西,RunLoop和Runtime。Runloop官方文档 你肯定写过一个按钮点击事件,点击界面上的一个按钮,这个时候就会有对应的按钮响应事件发生。给我们的感觉就像应用一直处于随时待命的状态,在没人操作的时候它一直在休息,在让它干活的时候,它就能立刻响应。其实

逝水无情的博客 3232

Python调用Google Trends官方数据接口实战指南

Google Trends作为全球最权威的搜索热度分析工具,其数据本质是公开、结构化、可编程访问的时序指标,而非需爬取的网页内容。其底层基于标准HTTP协议与JSON API交互,核心原理在于复现用户浏览器行为——通过/explore接口获取token,再凭token请求/widgetdata/multiline等端点获取归一化(0-100)时间序列数据。该技术路径规避了Selenium渲染依赖与非官方库的脆弱性,具备高稳定性、易调试、可监控等工程优势,广泛应用于竞品监测、内容选题验证、地域营销策略制定等业

weixin_29789925的博客 417

【iOS】Runtime

之前分part学习了Runtime的内容,但是没有系统的总结,这篇博客用来总结学过的所有Runtime知识Runtime又叫运行时,是一套底层的C语言API,是iOS系统的核心之一在编码阶段中,当我们向一个对象发送消息时,编译阶段只是确定了我们需要向接收者发送消息,但是接收者如何响应与处理这条消息是运行时决定的,我们来看一个例子#import // 基类 Animal@end} @end// Dog 类继承自 Animal@end");

weixin_72437555的博客 1536

导数与微分在 FPS 射击游戏中的实际应用:把“手感”算出来

摘要:射击游戏开发中,单线程适用于简单小游戏(如单机打靶),所有任务由主线程顺序处理,代码简单但效率较低;多线程则适合复杂场景(如多人在线3D大作),通过渲染、逻辑、网络、音效等线程分工协作,确保画面流畅、响应迅速和实时同步。选择依据取决于游戏复杂度、联网需求和性能要求,小型游戏用单线程,大型高要求项目必须采用多线程架构。(149字)

本博客聚焦游戏开发技巧、创业实战心得及大学热门课程干货。这里既有技术深度,也有思维广度,无论你是开发者、创业者还是高校学子,都能在这里找到适合自己的成长之路! 3278

endNote X9 增加 / 删除参考文献 文献编号自动更新

EndNote X9 插入参考文献常见问题总结。增删参考文献 文献编号自动更新

程序员,他们想的是什么?他们想的永远都是技术,他们崇尚的也永远都是技术。 7495

从ONNX Runtime到iOS ANE:Audio8-ASR-0.1B全平台部署方案对比

Audio8-ASR-0.1B是一款紧凑型自动语音识别模型,语言模型组件仅含0.1B参数,支持中文、英文、法文、德文、日文、韩文和粤语等多语言语音识别,是LLM时代最小可用的高性能ASR模型之一。本文将对比其在ONNX Runtime和iOS ANE平台的部署方案,助你选择最适合的部署方式。 ## 🌟 全平台部署概览 Audio8-ASR-0.1B提供了两种专注于部署的版本,满足不同场景需求

gitblog_00630的博客 405

【即插即用模块】Transformer篇 | TCSVT 2025 | DAFM:双注意力聚合+反向跨模态筛选,特征精准捕捉并融合!

本文提出了一种双模态注意力融合模块(DAFM),用于增强多模态图像融合任务中的特征交互。该模块通过双注意力聚合机制,结合自注意力与跨模态注意力,有效提升特征融合效果。DAFM采用可学习平衡因子动态调整注意力权重,并运用深度卷积降低计算复杂度。实验结果表明,该模块能显著提升多模态图像融合质量,适用于RGB-红外等双模态视觉任务。模块代码实现简洁,可直接集成到现有网络中作为特征融合层使用。

主要更新底层视觉(去噪、超分等)相关的科研内容,形式为【论文精读】+【论文复现】 174

iOS runtime详解1

1. 什么是runtime 运行时刻是指一个程序在运行(或者在被执行)的状态。也就是说,当你打开一个程序使它在电脑上运行的时候,那个程序就是处于运行时刻。在一些编程语言中,把某些可以重用的程序或者实例打包或者重建成为"运行库"。这些实例可以在它们运行的时候被连接或者被任何程序调用。 程序员有时候会在什么东西应该在编译的时候加载进来以及什么东西该在运行的时候使用之间做出抉择,前者有时候成为编译时

zrhloveswallow的专栏 1181

如何从 VMware 官网下载最新版本的 VMware Workstation

如何从 VMware 官网下载 VMware Workstation

XiaoqiangClub的博客 5877

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

ArcGIS Runtime SDK for iOS开发系列教程(1)——开发前准备

众说周知,ArcGIS10.1彻底架起了端到云的桥梁,使得空间信息的创造者与使用者紧密相连。它给用户带来了更加简易的操作方式,能够实现随时随地对空间信息的获取和共享,可以让任何人在任何地点以任何方式享用ArcGIS Online这个云GIS平台所提供的智能地图服务。                          图1 云架构下的ArcGIS体...

dengkangong8549的博客 354

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

iOS Runtime(1)

文/HenryCheng(简书作者) 原文链接:http://www.jianshu.com/p/f6300eb3ec3d 著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。 一、关于runtime 之前在项目中有遇到过用runtime解决改变全局字体的问题,所以再一次感受到了runtime黑魔法的强大,趁现在有机会分享一下对runtime的一些理解。 在对象调用方法

antjumper的专栏 431

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

iOS——Runtime学习(1)

iOS——Runtime学习(1) 动态语言和静态语言 了解Runtime,首先要知道动态语言和静态语言的区别: 静态类型语言,是指数据类型的检查以及函数的调用是在运行前(如编译阶段)做的。如C语言,编译阶段就要决定调用哪个函数,如果函数未实现就会编译报错。 动态类型语言,是指数据类型的检查和函数的调用是在运行时做的。运行时新的函数可以被引进,已有的函数可以被删除。 OC就是一门动态语言,...

u012380572的博客 253

iOS Runtime 实践(1)

很多时候我们都在看iOS开发中的黑魔法——Runtime。懂很多,但如何实践却少有人提及。本文便是iOS Runtime的实践第一篇。   WebView   我们这次的实践主题,是使用针对接口编程的方式,借助Excalibur系统,来达到动态切换UIWebView和WKWebkit的目的。 为什么要动态切换?其实我们众所周知,Apple的UIWebView存在巨大的内存泄漏。当网页内容...

weixin_34101229的博客 80

IOS高级开发 runtime(1)

一、 简介 IOS 开发中灵活使用runtime 会提高我们的程序性能和开发速度。要想使用runtime,首先要引入系统的头文件。 #import 当我们查看runtime.h的时候,我们会发现,其实runtime是很有条理的 const char *object_getClassName(id obj) //获取对象的类 Iv

LIN1986LIN的专栏 1074

iOS Runtime Method IMP指针详解(1)

endif我们可以从上面的结构体上面看出 objc_method_list是 objc_method 结构体。那么继续找 objc_method结构体 看看是否有IMP:分析:看了根据上面的关系网,我们知道在OC的类中,所有的方法在Runtime的时候都会变成 objc_method,IMP是一个函数指针,指向实现这个函数的方法。然后这些方法都被放到objc_method_list这个结构体里。Runtime 关于Method IMP 的API介绍/***//***/

2401_83977626的博客 912

ios runtime(1)

import import 我们前面已经讲过一篇runtime 原理,现在这篇文章主要介绍的是runtime是什么以及怎么用!希望对读者有所帮助! 首先,第一个问题,1》runtime实现的机制是什么,怎么用,一般用于干嘛?这个问题我就不跟大家绕弯子了,直接告诉大家,runtime是一套比较底层的纯C语言API, 属于1个C语言库, 包含了很多底层的C语言API。...

weixin_34342578的博客 82

我理解的iOS中的RunTime机制(1)

一、首先我们要先知道object-c是一门编译型、动态语言(这里强调下oc是静态类型语言),这在开发语言中是并多见的,一般的动态语言多为解释性语言。oc之所以能够做到即使编译型语言,又是动态语言。就是得益于RunTime机制。 由于本文主要讲解的是RunTime机制,所以语言类型不做过多描述,之后可以另写一篇语言类型的介绍。 二、这里主要讲解RunTime如何使用,其中主要的知识点如下

杜甲同学的专栏 2419

浅谈iOS运行时机制runtime(1)

学习iOS开发已经两年了,也做过一些iOS开发的小项目,对iOS开发多少有点自己的见解,接下来我来谈谈我对iOS中runtime机制的理解(由于本次是我第一次写博客,若书写中有错误,欢迎大家指出)。 进入主题,什么是runtime机制,其实就是运行时机制:对象的生成和消息的发送都是动态运行时生成的(运行时就是command+R,消息可以理解为函数的调用,如果你学过一门编程语言,那你应该知道函数的

JasonWang的博客 660
上一篇: Xcode 5 单元测试(二)OCMock和GHUnit
下一篇: iOS runtime (2)
focusjava
博客等级 码龄14年 127粉丝 528原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值