iOS之load和initialize方法详解

iOS中的load和initialize方法 在 iOS 开发中,+load和是两个常用的类方法,它们在不同的时间点被调用,并且有不同的用途。以下是它们的用法和区别。 阅读详情

在iOS中,我们都知道 +load 方法在类被加载的时候被调用(main 函数前),而 +initialize 方法则是类在第一次收到消息时被调用。由于 +load 方法只会被调用一次,所以很多人都想到在这个方法里面做一些方法交换的操作。但是 +load方法会影响App的启动速度,如果在项目中比较多的类都重写了 +load 方法,建议把这些操作移动至 +initialize 方法里面来实现。
+load 方法与 +initialize 方法除了调用时机不通之外。在有子类、分类的情况下表现也有不同之处。下面通过一个表格来罗列出不同的地方,希望能够帮助读者来更好的理解 +load 方法与 +initialize 方法。

~+load+initialize
调用时机当类被加载时,先父类后子类再分类在第一次收到消息时
是否沿用父类方法否是
分类全部执行,执行顺序取决于编译顺序覆盖原类的方法,如果多个分类后编译覆盖前编译的
调用次数仅一次0、1或多次
总结
  1. +load方法:
  • 当类被加载时调用。先父类后子类再分类,分类取决于编译顺序
  • 不受类的继承关系影响
  • 只会被调用一次
  1. +initialize方法:
  • 当类在第一次收到消息时被调用
  • 沿用父类方法。如果子类没有实现,会自动调用父类。分类会覆盖原类,多个分类则后编译覆盖前编译
  • 不同的情况会被调用0、1或多次
iOS面试题:load的调用时机 |快速列出App的所有+load方法 前言 Objective C +load 方法是个神奇又邪恶的方法。 当新手得到它时,会惊讶于它的神奇。 当高手得到它时,会沉迷其中无法自拔。 当老手得到它时,会惊恐于它的邪恶。 多数大型App都已经或者正在想办法去摆脱它。那么,如果快速看到你的App中有多少+load方法,看看中毒有多深。 那么想想,如果这些+load方法中的代码出现了crash,你的crash监控(bugly等等)能监控到吗? I、列出App的所有+load方法 点击一下Pause,然后输入 (lldb) br s -r "\+\[.+ 阅读详情

相关推荐

iOS之深入解析类方法+load与+initialize的底层原理

一、前言 APP 启动到执行 main 函数之前,程序就执行了很多代码。 执行顺序: 将程序依赖的动态链接库加载到内存; 加载可执行文件中的所有符号,代码 runtime 解析被编译的符号代码; 遍历所有的 class; 按继承层级一次调用 Class 的 load 和 category 的 load 方法。 二、+load +load 方法是当类或分类被添加到 Objective-C runtime 时被调用的,实现这个方法可以让我们在类加载的时候执行一些类相关的行为

╰つ栺尖篴夢ゞ 9816

iOS类对象的初始化+initialize

简介 在iOS中,对象可分为类对象和实例对象,实例对象即我们平时alloc init初始化的一个具体的对象,实例对象所属的类,称为类对象。类对象、实例对象 +initialize 是一个类方法,在iOS中NSObject以及子类的都有这个方法。 + (void)initialize; 它是一个类方法,而且还是一个初始化方法。它是用来初始化类对象的方法。和初始化实例对象一样,是一个初始化方法: 我们可以在类里面复写此方法,但是一般我们不需要这么做,因为系统会自动帮我们初始化类对象,当该类收到第一个消息的时候

竹毛言己 812

大白话,Android Studio安装及其资源分享(离线gradle配置)

安装AndroidAtudio,并通过aliClound镜像与离线gradle配置,来跳过相对“繁文缛节”的过程,直接实现开发

wangzixuanemp的博客 3598

iOS 的initialize和load方法

+initialize和+load这两个方法在类使用时会自动调用。但是两个方法的不同点会导致应用层面上性能的显著差异。 1.+initialize方法: 这个方法会在第一次初始化这个类之前被调用,我们一般用来初始化静态变量。 + initialize方法类似一个懒加载,如果没有使用这个类,那么系统默认不会去调用这个方法,且默认只加载一次; + initialize方法的调用看起来会更合理,通常在它里面写代码比在+ load里...

程序猿老樊的博客 742

FPGA DMA IP核使用指南

数据传输:支持从源地址到目标地址的数据传输。中断管理:提供中断信号,便于CPU处理传输完成事件。传输控制:支持传输大小、方向和暂停/恢复控制。

weixin_66634995的博客 2428

【有啥问啥】智能座舱CPD技术:毫米波雷达如何守护儿童安全?

本文深入探讨了智能座舱中CPD(Child Presence Detection)技术如何通过毫米波雷达保障儿童安全。毫米波雷达凭借其穿透性检测、微动感知等优势,成为儿童遗留车内的有效解决方案。文章详细解析了技术原理、系统集成方案及安装指南,为智能座舱安全技术提供了实用参考。

weixin_29193259的博客 358

iOS load和initialize方法详解

iOS开发中总能看到+load和+initialize的身影,网上对于这两个方法有很多解释,但有些细节不够清楚,不够详细。今天我们来详细扒一扒这两个方法. 下面针对对load方法的使用过程的变现提出一些问题。 问题 1.load方法什么时候调用? 2.load方法调用原理?(是消息机制还有另有别的机制) 3.load方法调用顺序? 4.load方法调用次数? 新建代码 新建Person类,Pe...

muziyuting的博客 857

Rockchip eMMC寿命监控:SMART信息读取与预防性维护

擦写计数坏块数量温度使用时间。

小灰灰的博客 766

iOS类方法load和initialize详解

iOS开发中总能看到+load和+initialize的身影,网上对于这两个方法有很多解释,官方也有说明,但有些细节不够清楚,今天我们来详细扒一扒这两个方法. load Apple文档是这样描述的 Invoked whenever a class or category is added to the Objective-C runtime; implement this method to p...

weixin_33785108的博客 163

ICLR 2025 | MambaPEFT: 探索针对Mamba的参数高效微调方法

通过利用海量数据构建大型模型,基于Transformer的模型生态系统已逐步确立。参数高效微调(PEFT)是一项至关重要的技术,它能以最低成本将这些模型应用于下游任务,同时实现高效的性能表现。最近,基于状态空间模型(SSM)的Mamba模型作为Transformer的潜在替代方案受到了广泛关注。尽管已经提出了许多基于Mamba的大规模模型,但如何高效地将预训练的Mamba模型应用于下游任务仍有待研究。在本文中,作者对适用于Mamba的PEFT方法展开了探索性分析。

小白学视觉 327

基于YOLOv5的仪表读数识别系统:从检测到识别的完整解决方案

随着工业自动化水平的不断提高,仪表读数识别技术在电力系统、石油化工、智能制造等领域发挥着越来越重要的作用。本文提出了一种基于YOLOv5的仪表自动读数识别系统,该系统能够有效区分指针式和数字式仪表,并实现高精度的读数识别。我们详细介绍了系统的整体架构、数据集构建、模型训练策略以及用户界面设计,并提供了完整的代码实现。实验结果表明,本系统在仪表检测和读数识别任务上均取得了优异的表现,为工业现场的自动化监控提供了可靠的技术支持。关键词:仪表读数识别;YOLOv5;目标检测;深度学习;工业自动化。

YOLO 679

iOS 类拓展分析、load_iamges分析、initalize分析

iOS 类拓展分析、load_iamges分析、initalize分析前言1.  类拓展分析2.  关联对象原理3.   load_images 分析4.   initalize 分析总结 前言   通过之前几篇对read_iamges的分析,我们知道了程序在启动运行时的流程,知道了什么是 懒加载类 和 非懒加载类 和其加载过程,以及搭配 非懒加载分类 和 懒加载分类 时的几种加载情况。 那么...

LiangliangSpeak的博客 312

《自然语言处理实战入门》文本分类 ---- 使用词向量与SVM 进行文本分类

文本分类用电脑对文本集(或其他实体或物件)按照一定的分类体系或标准进行自动分类标记。 它根据一个已经被标注的训练文档集合, 找到文档特征和文档类别之间的关系模型, 然后利用这种学习得到的关系模型对 新的文档进行类别判断 。文本分类从基于知识的方法逐渐转变为基于统计 和机器学习的方法。

shiter编写程序的艺术 2389

iOS底层原理总结 - Category的本质

iOS底层原理总结 - Category的本质面试题Category的实现原理,以及Category为什么只能加方法不能加属性。Category中有load方法吗?load方法是什么时候调用的?load 方法能继承吗?load、initialize的区别,以及它们在category重写的时候的调用的次序。Category的本质首先我们写一段简单的代码,之后的分析都基于这段代码。 iOS学习群:72...

qq_41842579的博客 1138

高精度导航 | RTK:2025年高精度导航算法综述,包括:原理,数据,公式,完整代码,开源代码链接

中国科学院国家授时中心的最新研究表明,PPP-AR/PPP-RTK增强算法使时间传递链路的稳定性提升超过30%,模糊度固定成功率高达93.57%,首次固定时间缩短至20分钟内。当这一愿景实现,人类社会的生产效率和资源利用率将迎来革命性提升,高精度定位将成为像电力、互联网一样的基础服务,深刻重塑我们的生活方式和文明形态。PPP-RTK作为GNSS定位领域的最前沿技术,成功融合了精密单点定位(PPP)和实时动态定位(RTK)的双重优势。,实现在无GNSS信号环境下(如隧道、地下停车场)的连续厘米级定位。

尘世冰封的专栏 1609

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

iOS分类与关联对象底层源码全解析:面试必备指南

Objective-C运行时机制是iOS开发的核心,分类(Category)和关联对象(Associated Object)是其中极具代表性的底层能力。分类允许在不修改原类代码的情况下扩展方法,但其编译产物category_t中并无存储成员变量的字段,因此必须借助运行时的关联对象来动态添加属性。深挖源码可见,分类的合并依赖attachLists的头部插入,而关联对象基于全局哈希表AssociationsManager实现,其存取涉及加锁与策略管理。理解这些机制,不仅能解释分类与Extension的差异、+l

weixin_30606461的博客 308

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

iOS之类方法load和initialize、loadview

load和initialize这两个类方法, 在于iOS会在运行期提前并且自动调用这两个方法,而且很多对于类方法的规则(比如继承,类别(Category))都有不同的处理。 而因为这两个方法是在程序运行一开始就被调用的方法,我们可以利用他们在类被使用前,做一些预处理工作。 initialize和load的区别在于:load是只要类所在文件被引用就会被调用,而initi

代码解释生活 384

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

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

知识点

Runtime场景: 发送消息objc_msgSend 交换方法 动态添加方法 动态添加属性,属性关联 字典转模型 RunLoop使用场景 : 一、保证线程长时间存活 二、RunLoop如何保证NSTimer在视图滑动时依然能正常运转 三、RunLoop如何保证不影响UI卡顿 四、使用RunLoop 监测主线程卡顿,在主线程的RunLoop中添加一个observer,检测从 kCFRunLo...

weixin_34192993的博客 88

iOS- load和initialize 子类,分类,父类,以及同名方法的调用顺序

+ (void)load 1.+load方法加载顺序:父类> 子类> 分类 (load方法都会加载) 注意:(如果分类中有A,B,顺序要看A,B加入工程中顺序) , 可能结果:( 父类> 子类> 分类A> 分类B ) 或者( 父类> 子类> 分类B> 分类A ) 2.+load方法不会被覆盖(比如有父类,子类,分类A,分类B,这四个load方法都会...

samuelandkevin的专栏 3634

iOS OC 底层原理之 category、load、initialize

不能直接添加成员变量,但能通过runtime间接添加。property在category中只生成setter和getter方法声明。

xymspace 1767

iOS load和initialize的区别

可能有些童鞋还不清楚load和initialize的区别,下面简单说一下: 首先说一下 + initialize 方法:苹果官方对这个方法有这样的一段描述:这个方法会在 第一次初始化这个类之前 被调用,我们用它来初始化静态变量. initialize方法的调用时机,当向该类发送第一个消息(一般是类消息首先调用,常见的是alloc)的时候,先调用类中的,再调用类别中的(类别中如果有重写);如果该类只...

watertekhqx的博客 382

IOS开发之category(load,initialize)

因为category是把自己的实现向后偏移,前面是分类的实现,又因为是从后遍历分类插入到method的前面,所以后编译的分类,先调用,如果这个分类没有实现这个方法,会找其他分类,如果也没有再找自己的实现,如果都没有回通过isa向上找,这个位置就不详细介绍了,在其他文章有介绍。load方法会调用自己的父类,然后调用自己的分类,如果不是继承关系则跟编译顺序有关,并且如果先调用父类的load方法,再调用自己的时候就不调用父类的load方法了,因为load方法只调用一次。

m0_63640651的博客 928

深入详解 iOS的 +load和+initialize

+load 方法是系统自动调用的,无需手动调用,系统自动为每一个类调用+load方法(如果有),所以也无需手动调用[super load]方法。 +load 方法按照[SuperClass load]->[Class load]->[ChildClass load]的顺序加载。 +load 方法是在所有类被加入到runtime以后调用的。 [ChildClass load]方法是按照Compile Sources的排列顺序加载的,但要遵循调用[ChildClass load]之前,必须先调

u013712343的博客 1155

iOS load方法与initialize方法

在 iOS 开发中,我们经常会使用 +load 方法来做一些在main函数之前的操作,比如方法交换(Method Swizzle)等。现在分析一下load方法跟initialize方法的调用顺序以及区别。 1.先看下load方法 尝试定义一个继承自NSObject的Person类,并对其添加两个分类Life和Work;再定义一个Student类继承自Perso...

weixin_30436101的博客 434

iOS +load、+ initialize、init介绍

如果子类没有实现+initialize,那么就是先调用一次父类的+initialize,然后根据objc_msgSend的特点,在子类找不到+initialize,会到父类去找,那么就会再调用一次父类的+initialize方法,总共调用两次。2、如果分类实现了+initialize,则会覆盖类本身的+initialize调用,且调用顺序还是先调用父类分类的+initialize,再调用子类分类的+initialize;2、子类调用+load方法时,要先要调用父类的+load方法;

liuxinzhongliubin的博客 1322

iOS Category、 Load 、Initialize 底层详解

一:Category 类内部原理 一个类永远只有一个类对象。那分类的方法存放在哪里。运行起来后,最后对象方法统一都会放在类对象中。如果存在类方法,那么统一都会放在元类方法中。分类的合并是 运行时通过runtime动态的讲分类的方法合并到类方法和元类方法中。 那编译时刻 分类的最终数据结构就是下面这个结构体,下面这个样子 这里需要注意一下,有几个分类,就会有几个这样的_category_t 结...

qq_27909209的博客 1504
上一篇: iOS一句代码搞定下拉刷新和上拉加载更多
菜鸟的向往
博客等级 码龄10年 1粉丝 15原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值