iOS runtime (3)

iOS启动优化之—— 启动流程做了哪些事情 本文内容主要是根据 WWDC2019 Optimizing App Launch 内容编写先来个官方的PPT图,总共分为6个大的阶段 这里主要做的是系统的一些初始化, 内容包括: dyld3, libSystemInitdyld 全称 the dynamic linker在WWDC17, 苹果推出了DYLD3(参考 App Startup Time: Past, Present, and Future),再次之前都是使用DYLD2.x,替换计划如下:相比2.x版本,3在性能、安全性、可靠性都有明显的提升这 阅读详情

11、系统类的方法实现部分替换

- (void) methodExchange {

    Method m1 = class_getInstanceMethod([NSStringclass],@selector(lowercaseString));

    Method m2 = class_getInstanceMethod([NSStringclass],@selector(uppercaseString));

    method_exchangeImplementations(m1, m2);

    NSLog(@"%@", [@"sssAAAAss"lowercaseString]);

    NSLog(@"%@", [@"sssAAAAss"uppercaseString]);

}

打印结果:(仔细看log)

2013-07-26 16:33:22.776 HighOC[7104:c07] SSSAAAASS

2013-07-26 16:33:22.778 HighOC[7104:c07] sssaaaass

12、自定义类的方法实现部分替换

- (void) justLog1 {

    NSLog(@"justLog1");

}

- (void) justLog2 {

    NSLog(@"justLog2");

}

- (void) methodSetImplementation {

    Method method = class_getInstanceMethod([ClassMethodViewCtrclass],@selector(justLog1));

    IMP originalImp = method_getImplementation(method);

    Method m1 = class_getInstanceMethod([ClassMethodViewCtrclass],@selector(justLog2));

    method_setImplementation(m1, originalImp);

}

//[self methodSetImplementation];

//[self justLog2];


13、覆盖系统方法

IMP cFuncPointer;

IMP cFuncPointer1;

IMP cFuncPointer2;


NSString* CustomUppercaseString(idself,SEL_cmd){

    printf("真正起作用的是本函数CustomUppercaseString\r\n");

    NSString *string = cFuncPointer(self,_cmd);

    return string;

}

NSArray* CustomComponentsSeparatedByString(idself,SEL_cmd,NSString *str){

    printf("真正起作用的是本函数CustomIsEqualToString\r\n");

    return cFuncPointer1(self,_cmd, str);

}

//不起作用,求解释

bool CustomIsEqualToString(idself,SEL_cmd,NSString *str) {

    printf("真正起作用的是本函数CustomIsEqualToString\r\n");

    return cFuncPointer2(self,_cmd, str);

}

- (void) replaceMethod{

    cFuncPointer = [NSStringinstanceMethodForSelector:@selector(uppercaseString)];

    class_replaceMethod([NSStringclass],@selector(uppercaseString), (IMP)CustomUppercaseString,"@@:");

    cFuncPointer1 = [NSStringinstanceMethodForSelector:@selector(componentsSeparatedByString:)];

    class_replaceMethod([NSStringclass],@selector(componentsSeparatedByString:), (IMP)CustomComponentsSeparatedByString,"@@:@");

    cFuncPointer2 = [NSStringinstanceMethodForSelector:@selector(isEqualToString:)];

    class_replaceMethod([NSStringclass],@selector(isEqualToString:), (IMP)CustomIsEqualToString,"B@:@");

}


14、自动序列化(转)

#import "NSObject+AutoEncodeDecode.h"

@implementation NSObject (AutoEncodeDecode)

- (void)encodeWithCoder:(NSCoder *)encoder {

    Class cls = [selfclass];

    while (cls != [NSObjectclass]) {

        unsigned int numberOfIvars =0;

        Ivar* ivars = class_copyIvarList(cls, &numberOfIvars);

        for(const Ivar* p = ivars; p < ivars+numberOfIvars; p++){

            Ivar const ivar = *p;

            const char *type =ivar_getTypeEncoding(ivar);

            NSString *key = [NSStringstringWithUTF8String:ivar_getName(ivar)];

            id value = [selfvalueForKey:key];

            if (value) {

                switch (type[0]) {

                    case _C_STRUCT_B: {

                        NSUInteger ivarSize =0;

                        NSUInteger ivarAlignment =0;

                        NSGetSizeAndAlignment(type, &ivarSize, &ivarAlignment);

                        NSData *data = [NSDatadataWithBytes:(constchar *)self +ivar_getOffset(ivar)

                                                      length:ivarSize];

                        [encoder encodeObject:dataforKey:key];

                    }

                        break;

                    default:

                        [encoder encodeObject:value

                                       forKey:key];

                        break;

                }

            }

        }

        free(ivars);

        cls = class_getSuperclass(cls);

    }

}


- (id)initWithCoder:(NSCoder *)decoder {

    self = [self init];

    

    if (self) {

        Class cls = [selfclass];

        while (cls != [NSObjectclass]) {

            unsigned int numberOfIvars =0;

            Ivar* ivars = class_copyIvarList(cls, &numberOfIvars);

            

            for(constIvar* p = ivars; p < ivars+numberOfIvars; p++){

                Ivar const ivar = *p;

                const char *type =ivar_getTypeEncoding(ivar);

                NSString *key = [NSStringstringWithUTF8String:ivar_getName(ivar)];

                id value = [decoder decodeObjectForKey:key];

                if (value) {

                    switch (type[0]) {

                        case _C_STRUCT_B: {

                            NSUInteger ivarSize =0;

                            NSUInteger ivarAlignment =0;

                            NSGetSizeAndAlignment(type, &ivarSize, &ivarAlignment);

                            NSData *data = [decoderdecodeObjectForKey:key];

                            char *sourceIvarLocation = (char*)self+ivar_getOffset(ivar);

                            [data getBytes:sourceIvarLocationlength:ivarSize];

                        }

                            break;

                        default:

                            [self setValue:[decoder decodeObjectForKey:key]

                                    forKey:key];

                            break;

                    }

                }

            }

            free(ivars);

            cls = class_getSuperclass(cls);

        }

    }

    

    return self;

}

NE564锁相环FM解调电路设计:10.7MHz中频实测与3种失真优化方案 本文详细解析了NE564锁相环在10.7MHz中频FM解调电路中的设计与优化方案。通过分析锁相环技术基础、电路架构设计及典型失真问题,提供了3种有效的失真优化方法,包括限幅增强、VCO频偏补偿和环路滤波优化,显著提升解调性能。文章还涵盖了PCB布局要点和系统测试验证,为高频电子线路设计提供实用参考。 阅读详情

相关推荐

ArcGIS遥感影像分类技术在植被覆盖度计算中的应用

本文详细介绍了如何利用ArcGIS遥感影像分类技术高效计算植被覆盖度。通过数据准备、监督与非监督分类方法详解,并结合制表分析与栅格计算器进行面积统计,最终实现从分类图到覆盖度百分比的全流程自动化与可视化,为生态评估与规划提供精准数据支持。

weixin_29091445的博客 419

RunTime之三

11、系统类的方法实现部分替换 - (void) methodExchange {     Method m1 = class_getInstanceMethod([NSStringclass],@selector(lowercaseString));     Method m2 = class_getInstanceMethod([NSStringclass],@sel

玄一的专栏 486

zabbix 监控EMC存储

经过搜索,找到了脚本地址,该项目应该是模板原作者创建的,该项目也有zabbix模板,和上面的应该是相同的,我用的是上面的模板。./unity_get_state.py --api_ip='X.X.X.X' --api_port='443' --api_user='zabbix' --api_password='PASSWORD' --storage_name="zabbix web前端配置的主机名" --discovery。修改权限,给zabbix用户执行权限,模板调用时以zabbix用户执行。

wangyfde的专栏 3753

iOS之覆盖系统方法(使用runtime交换方法)

一, 说明 转载自https://www.cnblogs.com/cqb-learner/p/5871118.html 二,解析 方式一:使用runtime交换方法 (推荐) #import "ViewController.h" /* Runtime(交换方法):主要想修改系统的方法实现 需求: 比如说有一个项目,已经开发了2年,忽然项目负责人添加...

LuochuanAD的博客 3163

Clion编译stm32cube初始化工程时non constant or forward reference address expression for section .ARM.extab报错

相信应该有同学在看了稚晖君关于clion开发stm32的文章之后也想在自己PC上实现“优雅の嵌入式开发”遇到和我类似的问题。他的文章是22年写的,我个人猜测应当是版本更新导致的不适配。意思就是说 READONLY 只能在gcc11以后的版本中使用,gcc10及以前的版本将无法正确识别,也就有如下错误。或者就可以将gcc升级至最新的版本。记得在clion工具链中修改c,cpp编译器的位置。可以将文本括号中的 READONLY 全部删除。当时由于没有注意到这行注释导致在这里卡了好久。

2301_77256849的博客 2509

AHRS互补滤波(Mahony)算法及开源代码

AHRS(Attitude and heading ref AHRS(Attitude and heading reference system,也就是航姿参考系统。在互补滤波算法中传感器主要采用了IMU(陀螺仪、加速度计)和磁力计。 AHRS的基本思想是,在载体没有平移运动的情况下,通过加速度感知重力分量,可以计算出载体的俯仰(Pitch)和横滚(Pitch);磁力计可以感知磁北方向,因此可以计算载体的磁北航向;而陀螺仪测量输出载体的旋转角速度,通过积分可以计算得到横滚、俯仰、航向增量,但由于陀螺输出值含

weixin_42918498的博客 3万+

iOS交换系统方法

交换系统方法也属于runtime的一部分 1.首先导入runtime #import &lt;objc/runtime.h&gt; 2.取出系统方法与你写的方法 Method systemMethod = class_getInstanceMethod(self, @selector(systemMethod)); Method my_Method = cl...

MeteoriteMan的博客 4022

vhr 微人事系统安装与部署教程(SpringBoot + Vue 项目实战)

vhr(微人事)是一个开源的人力资源管理系统项目。系统采用前后端分离架构,主要技术栈包括:后端:MyBatis前端:VueElement UIAxios数据库:MySQL系统通常包含以下模块:员工管理部门管理职位管理薪资管理权限管理系统管理整体功能已经接近企业级后台系统。vhr(微人事)是一个非常经典的开源人力资源管理系统项目,基于SpringBoot + Vue 前后端分离架构。系统包含:员工管理部门管理权限管理薪资管理。

m0_69484557的博客 486

ios系统类的方法实现部分替换

不说废话,直接上代码,利用runtime

freda_h的博客 732

2022李宏毅作业hw1—新冠阳性人员数量预测。

从非常基础的内容开始,主要是我的水平也很基础。

YI_SHU_JIA的博客 1万+

将 SAP BTP ABAP environment 与 SAP S/4HANA Cloud 公有云版集成:从架构理念到落地实战

本文探讨了在SAP云环境中实现ABAP扩展应用与S/4HANA Cloud系统集成的技术方案。通过建立标准化的远程通信通道,开发者可在SAP BTP ABAP环境中开发扩展应用,同时安全访问S/4HANA Cloud的核心业务数据和服务。文章详细介绍了整体架构设计、开发实现步骤(包括定义通信场景、生成服务消费模型和编写调用代码)以及管理员在S/4HANA侧的配置工作(创建通信安排和技术用户)。通过一个业务伙伴自助注册平台的案例,展示了如何在不修改标准系统的情况下实现云扩展,体现了SAP"干净核心&

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 237

iOS runtime详解3

IOS - runtime [0] Outline   --  [1] 版本和平台   --  [2] 与Runtime System交互   --  [3] 方法的动态决议   --  [4] 消息转发   --  [5] 类型编码   --  [6] 属性声明   [1] 版本和平台 Runtime System对于Obj

zrhloveswallow的专栏 1139

BLDC控制实验:方波、霍尔、开环、定速、正转

本文记录博主学习BLDC控制软件的过程。 文章目录1 概述2 软件架构及工具链2.1 软件架构2.2 工具链3 底层代码生成3.1 时钟配置3.2 按键输入配置 1 概述 本文是博主第一次做BLDC控制实验,目的仅仅是写代码让BLDC转起来,而暂时不考虑其他复杂的需求。 控制的方法是比较简单的六步换相法。利用电机内部的霍尔传感器,通过参考电机厂家给出的二二导通换相表,生成方波来控制电机。第一次实验为了简化需求,只考虑开环、定速、正转的情况: 开环:不考虑速度反馈,直接给PWM让电机转起来; 定速:不考虑速

u013288925的博客 1万+

iOS_Runtime3_动态添加方法

当调用一个未实现的对象方法,或者说发送未知的消息给接收者时候,消息的接受者会调用+ (BOOL)resolveInstanceMethod:(SEL)sel; 当调用一个未实现的类方法,或者说发送未知的消息给接收者时候,消息的接受者会调用+ (BOOL)resolveClassMethod:(SEL)sel; 任何一个方法默认都有两个隐式参数(id self, SEL _cmd),其中self指代调

翱翔的魁魁 452

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

iOS 【iOS Runtime浅析(3):Method Swizzling】

Runtime Method Swizzling

CoderZYWang 1088

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

iOS进阶教程3-Runtime实际运用

1 Runtime是什么 Runtime基本是用C和汇编写的,可见苹果为了动态系统的高效而作出的努力。其中最重要的是消息转发机制 对于C语言,函数的调用在编译的时候会决定调用哪个函数,编译完成之后直接顺序执行,无任何二义性。 OC的函数调用成为消息发送。属于动态调用过程。在编译的时候并不能决定真正调用哪个函数(事实证明,在编 译阶段,OC可以调用任何函数,即使这个函数并未实现,只要申明过就不...

Coder Bruce 291

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

2020 阿里、字节iOS面试题之Runtime相关问题3(附答案)

目录 2020 阿里、字节iOS面试题之Runtime相关问题1 2020 阿里、字节iOS面试题之Runtime相关问题2 2020 阿里、字节iOS面试题之Runtime相关问题3 runtime相关问题之内存部分的关联属性或者hook相关的Method Swizzle 经过前两期内容 我们这期来讲一下 内存部分的剩余问题 主要包含如下: Method Swizzle注意事项 属性修饰符atomic的内部实现是怎么样的?能保证线程安全吗 iOS 中内省的几个方法有哪些?内部实现原理是什么 clas

D_猿员的博客 532

第三章:iOS应用运行时解析——3.3 Cycript和Runtime Analysis

。。。

vmdig.com 758

iOS 动态更换Icon

动态切换 App 的 icon 这个需求,在上一家公司做一款定制 App 时遇到过一次,这次领导说可能需要做,就又做了一次。虽然不是什么很难的知识点,这里也就记录一下自己做的过程吧。 info.plist 文件编辑 更换 Icon 静默切换 info.plist 文件 为了动态更换 icon,我们需要先配置一下我们项目的 info.plist 文件: 加入 Icon files(iOS5...

weixin_30888027的博客 332

iOS应用程序安全(3)-理解Objective-C Runtime

http://wufawei.com/2013/11/ios-application-security-3/ 作者:Prateek Gianchandani 译者:吴发伟 原文网址:http://resources.infosecinstitute.com/ios-application-security-part-3-understanding-the-objective-c-ru

fg313071405的专栏 828

iOS --- 使用runtime解决3D Touch导致UIImagePicker崩溃的问题

3D Touch 3D Touch是iPhone 6s/6splus设备才有的特点, 在系统相册中长按一个照片, 可触发3D Touch相关的操作. 而在没有3D Touch的设备中, 在系统相册中长按一个照片, 会导致crash. 这看起来像是iOS系统的一个bug.原因在于: 触发3D Touch操作后, PUPhotosGridViewController的previewingConte

xiyu_xiaoxiao的博客 508

大钟的ios开发之旅(3)————聊聊Runtime的objc_mesgSend

一、前言       ios开发中,@property的修饰就有很多的修饰词,如retain、assign、strong、weak、nonatomic等等,而这些修饰词在ARC模式下与非ARC模式下也是略有不同。下面先简单说说ARC模式 二、什么是ARC       ARC是iOS 5推出的新功能,全称为Automatic Reference Counting。一句话说,

[conowen]大钟的专栏 6815

iOS启动速度优化,看这一篇就够了

参考: [mach-o]: Mac OS X ABI Mach-O File Format Reference [mach-o]: https://juejin.im/post/5ab47ca1518825611a406a39 [启动优化] https://blog.youkuaiyun.com/hello_hwc/article/details/78317863 [启动优化] https://cloud.t...

hatjs880328的博客 1290

iOS开发笔记 -- 动态切换APP的logo

1、618大促,看到天猫与京东的logo 也相应改变,所以查找资料 探究其实现方式。 2、实现的过程并不复杂,在此做个笔记,在今后的项目中可能会用到。 3、本篇笔记 demo 1、先看一下实现的效果。 2、苹果在10.3开放了一个新的API,就是更换APP的Icon图标。alternateIconName: logo的名称,为nil时 则为 默认的。 - (void...

会骑牛的小七 1931

ArcGIS Runtime SDK for iOS开发系列教程(3)——Objective-C语法基础

  Objective-C这门语言是由Brad Cox和Tom Love于1980年在Stepstone发明的。它是给C语言添加了面向对象的特性,与C语言完全兼容。目前,主要用于苹果的Mac OS X和iOS平台的开发。在2012年10月世界开发语言排行榜中Objective-C稳居于第三位。 •关键字    为了避免与C,C++语言中的关键字冲突,所有的Objective-C...

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

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值