在c语言中load,一道题理清Objective-C中的load和initialize

Objective-C中有两个方法比较特殊,他们会在Runtime时根据情况自动调用,下面我们简单分析一下调用时机以及使用场景~

b98b95d4d663ab20c10a5a95be2d6720.png

一般在iOS初中级面试时偶尔会被问到load和initialize方法,我出了一道题,估计会搞晕很多人。大家来看一下下面的程序以及图一会输出什么?(这个Demo请点击这里查看详情)//Father.m

+ (void)load {

NSLog(@"Father:%s %@", __FUNCTION__, [self class]);

}

+ (void)initialize {

NSLog(@"Father:%s %@", __FUNCTION__, [self class]);

}

//Son.m   Class Son Extends Father

+ (void)load {

NSLog(@"Son:%s %@", __FUNCTION__, [self class]);

}

//Son+load.m

+ (void)load {

NSLog(@"Son+load:%s %@", __FUNCTION__, [self class]);

}

//Other.m

+ (void)load {

NSLog(@"Other:%s %@", __FUNCTION__, [self class]);

}

+ (void)initialize {

NSLog(@"Other:%s %@", __FUNCTION__, [self class]);

}

//Other+initialize.m

+ (void)initialize {

NSLog(@"Other+initialize:%s %@", __FUNCTION__, [self class]);

}

//main.m

int main(int argc, char * argv[]) {

NSLog(@"Main method start!");

return 0;

}

2329f63e7d5ccaabed125b8bbf83abf2.png

我是图一

答案是:

aa61f2642f8c8cb36085f5f638796eb1.png

b6e67385094e6c4975a0df3e2de848de.png

首先来说一下调用时机:+load()方法:官方文档上说Invoked whenever a class or category is added to the Objective-C runtime;,意思是说当类被加载到runtime的时候就会运行,也就是说是在main.m之前~会根据Compile Sources中的顺序来加载,但还有一个需注意的加载顺序

A class’s +load method is called after all of its superclasses’ +load methods.

A category +load method is called after the class’s own +load method.

意思是说有继承关系的会先调用父类+load,扩展的类在所有的类在方法之后再开始扩展方法的+load,每个类只会调用一次+load+initialize()方法:官方文档上说Initializes the class before it receives its first message.意思是在类接收第一条消息之前初始化类

值得注意的点是:类初始化的时候每个类只会调用一次+initialize(),如果子类没有实现+initialize(),那么将会调用父类的+initialize(),也就是意味着父类的+initialize()可能会被多次调用

最后说下使用场景:+load():通常用来进行Method Swizzle,尽量避免过于复杂以及不必要的代码

+initialize():一般用于初始化全局变量或静态变量

EOF:

好了,通过上述的所概括应该能知道为什么答案是那样了~另外如果文章中有什么错误或者意见请大家多多指教~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/278931.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

018.Zabbix维护时间和模板导入

一 维护时间 在某些正常业务维护期间,不需要进行告警,可添加维护时间。二 维护时间添加 2.1 维护 参数描述Name维护名称Maintenance type两种维护类型可选:With data collection - 依旧收集数据No data collection - 暂停收集数据Active since维护周期开…

本地服务器下的局域网安全吗_本地安全认证服务器

本地服务器下的局域网安全吗Today a reader had a very good question about lsass.exe is the Microsoft security management process for domain access and local security policies. Simply put it manages who logs on to your PC and/or Server. There are a few viru…

Query-digest-UI监控慢查询,以及此工具的改进版

本文主要描述基于pt-query-digest工具对慢查询日志进行监控的工具Query-digest-UI。(安装、使用、介绍以及benren提供的改进版。) 本文中描述的内容与其他网站上对Query-digest-UI的安装和使用稍有不同,因为本人对此工具稍做了调整。欢迎转载,请注明作者…

电热水器工作过程 c语言,热水器工作流程图

燃气热水器做为热水供应设备,被很多家庭所采用,然而,恒温作为燃气热水器的一个痛点,一次次被击中,那么到底为什么燃气热水器实现恒温这么难呢?我们将从原理讲起,带您认识真正的燃气热水器。燃气…

linux上tail命令_如何在Linux上使用tail命令

linux上tail命令Fatmawati Achmad Zaenuri/ShutterstockFatmawati Achmad Zaenuri / ShutterstockThe Linux tail command displays data from the end of a file. It can even display updates that are added to a file in real-time. We show you how to use it. Linux tail…

iphone充电图_哪些iPhone具有无线充电功能?

iphone充电图Kevin Parrish凯文帕里什Wireless charging means you can re-energize your phone’s battery without a physical tether. It also prevents possible damage to your phone’s charging port. Unfortunately, not all phones support wireless charging, but we…

windows平台下基于QT和OpenCV搭建图像处理平台

在之前的博客中,已经分别比较详细地阐述了“windows平台下基于VS和OpenCV”以及“Linux平台下基于QT和OpenCV"搭建图像处理框架,并且生成了相应的免费视频。这篇博客的主要内容,就是基于最新版本的相应工具,在windows平台下&…

android死锁解决方案,【线程死锁】Android多线程死锁产生的原因以及如何避免

一、死锁定义1、生活中的列子两人吃饭,但只有一双筷子,2人轮流吃(同时拥有2只筷子才能吃),某个时候一人拿了左筷子,一人拿了右筷子,两人同时占用一个资源,等待另一个资源,这时候甲等乙吃完并释放…

android mvvm 官方例子,详解Android的MVVM框架 - 数据绑定

本教程是跟着 Data Binding Guide学习过程中得出的一些实践经验,同时修改了官方教程的一些错误,每一个知识点都有对应的源码,争取做到实践与理论相结合。Data Binding 解决了 Android UI 编程中的一个痛点,官方原生支…

mac设置文件权限_如何在Mac上设置文件权限

mac设置文件权限Like all major operating systems, macOS allows you to restrict access to files using a complex set of file permissions. You can set these yourself using the Finder app, or by using the chmod command in your Mac’s terminal. Here’s how. 与所…

Discrete Log Algorithms :Baby-step giant-step

离散对数的求解 1.暴力 2.Baby-step giant-step 3.Pollard’s ρ algorithm …… 下面搬运一下Baby-step giant-step 的做法 这是在 https://ctf-wiki.github.io/ctf-wiki/crypto/asymmetric/discrete-log/discrete-log/ 上看到的,比较容易理解。 而且,…

Android添加item动画,RecyclerView基础篇-Item添加动画

Android_Banner.jpg简介本节中我们介绍下给RecyclerView中的Item添加动画。添加的动画,分为,在打开列表时有Item的展示动画,当滑动的时候没有动画和打开列表滑动时有动画两种实现过程实现一个列表效果如下Screenshot_2020-09-01-17-03-35-349…

geek_Ask How-To Geek:营救受感染的PC,安装无膨胀iTunes和驯服疯狂的触控板

geekYou’ve got questions and we’ve got answers. Today we highlight how to save your computer if it’s so overrun by viruses and malware you can’t work from within Windows, install iTunes without all the bloat, and tame a hyper-sensitive trackpad. 您有问…

第1课:接口测试和jmeter总结

接口测试 1. 接口的分类:webService和http api接口1) webService接口:是按照soap协议通过http传输,请求报文和返回报文都是xml格式,一般要借助工具来测试接口;2) http api接口:是按照…

极客时间和极客学院_极客历史记录的本周:Twitter的诞生,OS X十周年以及太空停留时间最长的时代即将结束...

极客时间和极客学院Every week we bring you interesting trivia and milestones from the archives of Geekdom. Today we’re taking a peek at the birth of Twitter, ten years of Mac OS X, and the longest space stay in history. 每周,我们都会为您带来有趣…

Android风格ppt,Material Design风格的快手PPT

突发奇想,感觉MD风格既然适合 Android 软件的界面,那么在一般PPT 演示中,效果当也是不错。于是在网上去寻了几处制作贴,也简单看了 MD 设计指南的几处要点。先试试一番再说。关于 MD 设计指南和几处制作贴,我会把链接贴…

dropbox链接过期_询问操作方法:“开始”菜单中的Dropbox,了解符号链接和翻录TV系列DVD...

dropbox链接过期This week we take a look at how to incorporate Dropbox into your Windows Start Menu, understanding and using symbolic links, and how to rip your TV series DVDs right to unique and high-quality episode files. 本周,我们来看看如何将D…

android listpreference 自定义,Android – 我的ListPreference中的自定义行布局

在我的Android应用程序中,我实现了从ListPreference扩展的类SubtitleColorListPreference.我需要这个,因为我需要为列表中的每个项目设置自己的布局.一切正常,它看起来像这样:重要的代码是onPrepareDialogBu​​ilder(AlertDialog.Builder builder)中的方法,我在其中…

火狐 增强查找工具栏_在“提示”框中:简单的IE至Firefox同步,轻松的Windows工具栏和识别USB电缆...

火狐 增强查找工具栏() Every week we tip into our mail bag and share great tips from your fellow readers. This week we’re looking at an easy way to sync your bookmarks between IE and Firefox, using simple Windows toolbars, and a clever way to ID USB cables…

Input Director使用一个键盘和鼠标即可控制多台Windows计算机

The problem is having two or more PC’s and having to go back and forth between workstation. Input Director solves the problem by allowing you to control multiple Windows systems with only one keyboard and mouse on the Master PC. 问题是拥有两台或更多台PC…