//
// main.m
// RuntimeFunctionApplication
//
// Created by 千雅爸爸 on 16/10/7.
// Copyright © 2016年 kodulf. All rights reserved.
//
#import <Foundation/Foundation.h>
#import <objc/runtime.h>
#import "Person.h"
#import <objc/message.h>
int main(int argc, const char * argv[]) {
@autoreleasepool {
//runtime的了解
//runtime 是一套由c语言api组合成的runtime库,
//runtime 会尽可能把代码的执行决策推迟到运行时
//oc 是动态语言,oc代码最终都会转换成底层runtime的代码
//[person setAge:10]
//objc_msgSend(person,@selector(setAge:),10);
//runtime的使用
//动态获取/创建类
//动态为一个类增加属性或方法
//在程序运行时便利类中的实例变量,属性或方法
//调换两个方法的逻辑实现(method swizzle)
//比如说我们要统计用户的点击时间或者是用户的访问率
//首先引入runtime的头文件,#import <objc/runtime.h>
//创建一个类person,
Person *person = [Person person];
NSLog(@"%@",[person class]);
//如何去利用runtime去动态的获取类中的实例变量:
Class personClass = person.class;
unsigned int outCount = 0;
//遍历实例变量
Ivar *ivarPtr =class_copyIvarList(personClass, &outCount);//新类型的指针变量
for (NSInteger i=0;i<outCount;i++) {
Ivar ivar = ivarPtr[i];
NSLog(@"实例变量:%s",ivar_getName(ivar));//获取实例变量,
}
//遍历类中的属性
objc_property_t *propertyPtr = class_copyPropertyList(personClass, &outCount);
for (NSInteger i=0; i<outCount; i++) {
objc_property_t property = propertyPtr[i];
NSLog(@"类的属性:%s",property_getName(property));
}
//遍历对象方法:
Method *methodPtr = class_copyMethodList(personClass, &outCount);
for (NSInteger i=0; i<outCount; i++) {
Method method = methodPtr[i];
SEL selector = method_getName(method);
NSLog(@"对象方法:%@",NSStringFromSelector(selector));
}
//oc消息发送时候的隐藏实现函数
//首先导入#import <objc/message.h>
//点击左侧里里面的文件夹标志下面的第一个项目名的蓝色图标,中间好像又一个a的字,找到buildsetting,搜索框输入objc,在preprocessing 里面
//将enable strict checking of objc_msgSend Calls 设置为no
//相当于告诉我们的编译器,不要去检查我们对雨objc_msgSend的方法的调用
[person setAge:10];//这个是oc的消息的发送。
NSLog(@"%@",person);
//下面的和上面实现相同的功能,只是下面的是上面的底层实现而已
objc_msgSend(person,@selector(setAge:),15);//如果没有将enable strict checking of objc_msgSend Calls 设置为no,那么会报错,说是需要0个参数,但是现在有3个参数
NSLog(@"%@",person);
}
return 0;
}
相关推荐
MATLAB功率谱函数psd与pwelch的使用
在网上看到 clear; Fs=1000; n=0:1/Fs:1; y=cos(2*pi*40*n)+3*cos(2*pi*100*n)+randn(size(n)); Nfft=1000; window=hanning(100); noverlap=20; dflag='none'; [Pxx,f]=psd(y,Nfft,Fs,window,noverlap); figure plot(f,10*log10(Pxx)); xlabel('frequency/Hz');ylab
Objective-C 的 Runtime
前言 本文为通识性的文章,并且会不断更新,如果有什么地方不懂的或者有需要补充的以及不太正确之处可以留言,我会补上的,谢谢各位!~ OC是一门动态的语言,它将很多静态语言在编译和链接时期做的事情放到了运行时来处理。这样的动态语言优势在于:写代码时更具灵活性。 e.g. 我们可以把消息转发给我们想要的对象,或者随意更换一个方法的实现等。 OC的这种特性使得他不仅仅需要一个编译器,还需要一个运行时
xilinx 暑期学校项目(二) 通过HLS实现二维傅里叶变换(2Dfft)及图像数据读入读出方法
要进行维纳滤波,首先就是要将图像矩阵通过二维fft变换到频域。 但是hls_fft.h中只有一维fft的函数,因此我们采用对行逐行进行一维fft,再对列逐行进行一维fft来实现二维fft的效果。 文章目录自带的fft例程二维fft的实现数据的读入和读出读入读出维纳滤波操作 自带的fft例程 自带的fft例程中包括有如下四个函数 void dummy_proc_fe( bool direction, config_t* config, cmpxData in[FFT_LENGTH],
[ObjectC]Runtime 运行时之一:类与对象
Objective-C语言是一门动态语言,它将很多静态语言在编译和链接时期做的事放到了运行时来处理。这种动态语言的优势在于:我们写代码时更具灵活性,如我们可以把消息转发给我们想要的对象,或者随意交换一个方法的实现等。 这种特性意味着Objective-C不仅需要一个编译器,还需要一个运行时系统来执行编译的代码。对于Objective-C来说,这个运行时系统就像一个操作系统一样:它让所有的工作可以
STM32F4用FSMC驱动AX58100 EtherCAT从站芯片,保姆级配置流程与避坑指南
本文详细介绍了STM32F4通过FSMC接口驱动AX58100 EtherCAT从站芯片的完整配置流程,包括硬件连接、时序优化、协议栈移植及TwinCAT主站集成。针对工业自动化场景,提供高性价比的实时控制解决方案,特别适合机械臂、CNC机床等精确同步应用,并分享关键调试技巧与性能优化方法。
IC版图设计布局经验90条!
13 如果一个cell调用其它cell,被调用的cell的vssx,vddx,vssb,vddb如果没有和外层cell连起来,要打上PIN,否则通不过diva检查.尽量在布局低层cell时就连起来。48 在匹配电路的mos管左右画上dummy,用poly,poly的尺寸与管子尺寸一样,dummy与相邻的第一个poly gate的间距等于poly gate之间的间距。8 更改cell时查看路径,一定要在正确的library下更改,以防copy过来的cell是在其他的library下,被改错。
Object-C Runtime 运行时
Runtime 运行时 参考文章:玉令天下的博客特酷吧南峰子的技术博客顾 鹏 Objective-C是动态语言,所以需要编译器的同时也需要一个运行时系统来动态创建对象、传递消息。在你需要的时候还能对其进行扩展,解决问题。Objective-C的Runtime是一个运行时的库(Runtime Library),主要使用C和汇编写的库,为C添加了面向对象的能力并创造了Objective-C。这个运行时系统就像一个操作系统一样:它让所有的工作正常运行。有动态类型(Dynamic typing),动态绑定
我的GIT练习ONE
Git 是一个分布式版本控制及源代码管理工具;Git 可以为你的项目保存若干快照,以此来对整个项目进行版本管理每一次的练习,都是对自身知识的巩固,以及对自身知识的一个测试。
Objective-C runtime机制(1)——基本数据结构:objc_object & objc_class
前言 从本篇文章开始,就进入runtime的正篇。 什么是runtime? OC是一门动态语言,与C++这种静态语言不同,静态语言的各种数据结构在编译期已经决定了,不能够被修改。而动态语言却可以使我们在程序运行期,动态的修改一个类的结构,如修改方法实现,绑定实例变量等。 OC作为动态语言,它总会想办法将静态语言在编译期决定的事情,推迟到运行期来做。所以,仅有编译器是不够的,它需要...
Windows 11 安装 OpenClaw(龙虾):不用WSL、不用虚拟机、启动、使用、停止、卸载
本文详解 Windows 11 原生安装 OpenClaw(龙虾)全流程,无需 WSL 或虚拟机。涵盖环境配置、安全警示、模型接入(如通义千问)及技能初始化。提供启动、文件自动化操作、停止与卸载的完整指南,并附常见认证过期解决方案。助您快速部署本地 AI 智能体,实现电脑操作自动化,提升工作效率。
Rockchip eMMC寿命监控:SMART信息读取与预防性维护
擦写计数坏块数量温度使用时间。
Objective-C runtime之运行时的基本特点(一)
作为一门动态编程语言,Objective-C 会尽可能的将编译和链接时要做的事情推迟到运行时。只要有可能,Objective-C 总是使用动态 的方式来解决问题。这意味着 Objective-C 语言不仅需要一个编译环境,同时也需要一个运行时系统来执行编译好的代码。运行时系统(runtime)扮演的角色类似于 Objective-C 语言的操作系统,Objective-C 基于该系统来工作。因此,
基于 STM32 的乒乓球发球机控制系统设计与实现
乒乓球发球机是一种能够按照预设参数自动、连续发出乒乓球的训练设备。本系统以 STM32F103C8T6 为主控核心,通过控制实现球速调节、实现落点与旋转方向控制、实现出球节奏控制,并配合 OLED 显示与按键人机交互,实现速度、频率、落点、旋转四大参数的可调发球训练。
object c 学习(一) : runtime
英语真心不怎样, 想补充一Object c 的语法方面的知识, 到底是读官方的文档呢,还是阅读其他中文的书籍呢? --------- 还是痛下决心,狂学英语好了. 因为在技术方面,英文不好真是寸步难行呀!!!!! 这里必须要采取一个策略: 搜集所有资料, 中英文结合着看. 1. object c 中的 runtime 是一个什么样的概念? 里面的解释:
win10 跳过U8环境检测的IE WebControls.rar
win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。
数学建模模型总结
这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!
Object-C runtime programming guide学习笔记
Messaging 向一个实例发消息,runtime使用的是objc_msgSend函数来发送的。 每一个class都有一个指针指向他的super class,有一个 dispatch table,指向每个方法的地址。 每一个实例(来自NSObject or NSProxy)都有一个指针isa,指向他的class. runtime通过向上回溯直到找到调用的方法,...
文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况
主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。
Objective-C Runtime
Runtime是什么? 运行时(Runtime)是指将数据类型的确定由编译时推迟到了运行时 Runtime是一套比较底层的纯C语言API, 属于1个C语言库, 包含了很多底层的C语言API 平时编写的OC代码,在程序运行过程中,其实最终会转换成Runtime的C语言代码,Runtime是Object-C的幕后工作者 Object-C需要Runtime来创建类和对象,进行消息发送和转...
霍尼韦尔SoftMaster使用说明
霍尼韦尔SoftMaster使用说明
【转】iOS学习——深入理解Objective-C的Runtime机制
Objective-C是基于C语言加入了面向对象特性和消息转发机制的动态语言,这意味着它不仅需要一个编译器,还需要Runtime系统来动态创建类和对象,进行消息发送和转发。下面通过分析Apple开源的Runtime代码(我使用的版本是objc4-646.tar)来深入理解Objective-C的Runtime机制。 Runtime数据结构 在Objective-C中,使用[receiv
Objective-C Runtime整理学习
Objective-C Runtime整理学习1、引言2、简介3、与Runtime交互1、Objective-C源代码2、NSObject的方法3、Runtime的函数4、Runtime术语1、SEL2、id3、Class4、Method5、Ivar6、IMP7、Cache8、Property5、消息1、objc_msgSend函数2、方法中的隐藏参数3、获取方法地址6、动态方法解析7、消息转发1、重定向2、转发3、转发和多继承4、替代者对象(Surrogate Objects)5、转发与继承8、健壮的实例
ios学习路线—Objective-C(Runtime类与对对象)
简介 Objective-C语言是一门动态语言,它将很多静态语言在编译和链接时期做的事放到了运行时来处理。这种动态语言的优势在于:我们写代码时能够更具灵活性,如我们可以把消息转发给我们想要的对象,或者随意交换一个方法的实现等。这种特性意味着Objective-C不仅需要一个编译器,还需要一个运行时系统来执行编译的代码。对于Objective-C来说,这个运行时系统就像一个操作系统一样:它让所有的工
【iOS】——Runtime学习
iOS的Runtime,通常称为Objective-C Runtime,是一个C语言库,包含了很多底层的纯C语言API。,它是Objective-C语言动态特性的基石。这个系统在程序运行时提供了一系列强大的功能,允许我们在应用运行过程中动态地操作类和对象,执行诸如检查和改变对象、交换方法实现、动态添加方法或属性等操作。高级编程语言想要成为可执行文件需要先编译为汇编语言再汇编为机器语言,机器语言也是计算机能够识别的唯一语言,但是OC并不能直接编译为汇编语言,而是要先转写为纯C语言再进行编译和汇编的操作,
OC底层学习-Runtime
OC底层学习-Runtime1. 概述2.Runtime之 isa指针2. 面试题 1. 概述 Objective-C是一门动态性比较强的编程语言,跟C、C++等语言有着很大的不同 Objective-C的动态性是由Runtime API来支撑的 Runtime API提供的接口基本都是C语言的,源码由C\C++\汇编语言编写 2.Runtime之 isa指针 要想学习Runtime,首先需要了解底层的一些常用的数据结构,比如isa指针 在arm64架构之前,isa就是 一个普通的指针,储存着Cla
object-c runtime使用
最近在学习ios开发,尝试做个通讯录,使用了APAdress来读取系统的通信录,然后需要将通信录中的联系人转换为拼音并进行排序,最先想到的做法是取出APContact中的联系人名称,然后对这个名称进行排序,但这样做的话会导致整个排序代码职能给APContact用,如何使的这个排序代码可以给所有的类的用(此类中需要有特定的属性),这时可以用到object-c的运行时特性 通过iva
理解 Objective-C Runtime
当人们初学 Cocoa/Objective-C 时,Objective-C Runtime 是被忽略的特性之一。原因是 Objective-C(这门语言)很容易在几小时内就熟悉,新学 Cocoa 的人花费他们大部分的时间学习 Cocoa 框架和适应它是如何工作的。然而每个人至少应该知道一些 runtime 的工作细节,需要比知道编译器会把 [target doMethodWith:var1];
OC runtime学习笔记一
github Demo: https://github.com/lihei12345/OCRuntimeTest 参考资料:http://blog.youkuaiyun.com/colorapp/article/details/43735817 1. 直接使用命令行编译OC文件:clang -fobjc-arc -framework Foundation test.m -o test;使用
Runtime学习基础之isa指针
重要的事情说三遍: 重要提示:你要想学习并且学好Runtime,首先你要了解它底层的一些常用的数据结构,比如isa指针 重要提示:你要想学习并且学好Runtime,首先你要了解它底层的一些常用的数据结构,比如isa指针 重要提示:你要想学习并且学好Runtime,首先你要了解它底层的一些常用的数据结构,比如isa指针 首先问大家一个问题,如果问你对isa了解吗? 我估计你的答案基本就是: 实例对象的isa指向类对象,类对象的isa指向元类对象;当调用对象方法的时候,通过instance的isa找
runtime学习笔记
文章目录前言阶段一 Runtime源码阅读Public Headers 前言 在苹果开源网站上可以下载到Runtime源代码。 之前通过网友的博客对Runtime有所了解,项目里也有所应用,但是对有些东西总是感觉模棱两可,所以没事的时候看看源码学习学习还是很有必要的。 下面就是我看源码和查阅资料进行学习整理的笔记。 阶段一 Runtime源码阅读 初次下载学习可能会感觉无从下手,就从“Public...
2万+



被折叠的 条评论
为什么被折叠?



