在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.pswp.cn/news/278931.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/278931.shtml
英文地址,請注明出處:http://en.pswp.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語言,熱水器工作流程圖

燃氣熱水器做為熱水供應設備,被很多家庭所采用,然而,恒溫作為燃氣熱水器的一個痛點,一次次被擊中,那么到底為什么燃氣熱水器實現恒溫這么難呢?我們將從原理講起,帶您認識真正的燃氣熱水器。燃氣…

es6 模塊化

test.js var vm"321321"; export { vm }; ------------------------------------------------------ export var name"李四"; a.vue import {vm} from /test console.log(vm); ------------------------------------------------------ console.log(name);…

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…

初學者萬年歷c語言源代碼,C語言萬年歷的源程序

該樓層疑似違規已被系統折疊 隱藏此樓查看此樓for(j1;j<mon[i];j){cprintf("%3d ",j);/*if((firstj-1)%70)putchar(\n);*/}/*first(firstmon[i])%7;if(first0)first7;*/}}void month5_8(){for(i0;i<2;i){window(2i*w,3,29w*i,11);textbackground(5);clrscr();t…

用imageMagick的composite合并圖片

composite命令可以非常方便的合并兩張圖片 因此用來進行圖像加水印、批量增加邊框等常用的變換 最簡單的用法為&#xff1a; composite -gravity north src.jpg coverback.jpg des.jpg 其中src.jpg為前景圖片 coverback.jpg為背景圖片。 des.jpg為疊加后的結果 -gravity north …

白帽子講web安全——認證與會話管理

在看白帽子講web安全&#xff0c;剛好看到認證與會話管理&#xff1a;也就是我們在平常滲透測試中遇到最多的登錄頁面&#xff0c;也即是用戶名和密碼認證方式&#xff0c;這是最常見的認證方式。 了解兩個概念&#xff1a;認證和授權 1&#xff09;&#xff1a;認證的目的是為…

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…

關聯分析算法c語言實現,機器學習關聯分析

AI開發平臺ModelArtsModelArts是面向開發者的一站式AI開發平臺&#xff0c;為機器學習與深度學習提供海量數據預處理及半自動化標注、大規模分布式Training、自動化模型生成&#xff0c;及端-邊-云模型按需部署能力&#xff0c;幫助用戶快速創建和部署模型&#xff0c;管理全周…

windows平臺下基于QT和OpenCV搭建圖像處理平臺

在之前的博客中&#xff0c;已經分別比較詳細地闡述了“windows平臺下基于VS和OpenCV”以及“Linux平臺下基于QT和OpenCV"搭建圖像處理框架&#xff0c;并且生成了相應的免費視頻。這篇博客的主要內容&#xff0c;就是基于最新版本的相應工具&#xff0c;在windows平臺下&…

android死鎖解決方案,【線程死鎖】Android多線程死鎖產生的原因以及如何避免

一、死鎖定義1、生活中的列子兩人吃飯&#xff0c;但只有一雙筷子&#xff0c;2人輪流吃(同時擁有2只筷子才能吃)&#xff0c;某個時候一人拿了左筷子&#xff0c;一人拿了右筷子&#xff0c;兩人同時占用一個資源&#xff0c;等待另一個資源&#xff0c;這時候甲等乙吃完并釋放…

前端開發 常用用的靜態服務器

1 運用anywhere 安裝 &#xff1a;npm install anywhere -g想要以某個路徑作為靜態文件服務器的根目錄分享&#xff0c;只需要在該目錄下執行&#xff1a;anywhere 就會默認8000打開網頁&#xff0c; 若文件不是index.html 需要輸入文件名 A: anywhere -p 8000 ## 指定靜態服務…

前端面試題整理

1.HTML5的新特性。 主要講講新增哪些API:地理定位&#xff0c;拖放&#xff0c;web存儲應用緩存&#xff0c;webworkers&#xff0c; sse 。 http://www.w3school.com.cn/html5/html_5_intro.asp 2.CSS3的新特性。 https://segmentfault.com/a/1190000010780991 3、使用嚴格模式…

android mvvm 官方例子,詳解Android的MVVM框架 - 數據綁定

&#xfeff;本教程是跟著 Data Binding Guide學習過程中得出的一些實踐經驗&#xff0c;同時修改了官方教程的一些錯誤&#xff0c;每一個知識點都有對應的源碼&#xff0c;爭取做到實踐與理論相結合。Data Binding 解決了 Android UI 編程中的一個痛點&#xff0c;官方原生支…

VS2015 代碼左縮進

TabShift轉載于:https://www.cnblogs.com/527289276qq/p/8027882.html

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/ 上看到的&#xff0c;比較容易理解。 而且&#xff0c;…

Android添加item動畫,RecyclerView基礎篇-Item添加動畫

Android_Banner.jpg簡介本節中我們介紹下給RecyclerView中的Item添加動畫。添加的動畫&#xff0c;分為&#xff0c;在打開列表時有Item的展示動畫&#xff0c;當滑動的時候沒有動畫和打開列表滑動時有動畫兩種實現過程實現一個列表效果如下Screenshot_2020-09-01-17-03-35-349…