iOS面試題-load 和 initlize的區別

来源:https://www.cnblogs.com/jianqiu/p/18315984
-Advertisement-
Play Games

+load和+initialize是兩個與類的載入和初始化相關的特殊方法。它們在類的生命周期中的作用和調用時機有明顯的區別。 +load 方法 調用時機:+load在類初始載入進記憶體時調用,這通常發生在程式啟動的時候,所有類和分類(Category)的+load方法在應用程式的生命周期中只會被調用一 ...


+load+initialize是兩個與類的載入和初始化相關的特殊方法。它們在類的生命周期中的作用和調用時機有明顯的區別。

+load 方法

  • 調用時機:+load在類初始載入進記憶體時調用,這通常發生在程式啟動的時候,所有類和分類(Category)的+load方法在應用程式的生命周期中只會被調用一次。
  • 調用順序:首先調用類的+load方法,然後調用分類的+load方法。如果有多個分類都實現了+load方法,它們的調用順序是不確定的。
  • 繼承性:+load方法不會被自動繼承,即使子類沒有實現+load方法,父類的+load方法也會被調用。如果子類實現了+load方法,那麼父類和子類的+load方法都會被調用。
  • 線程安全:+load方法是線程安全的,Objective-C運行時保證+load方法在多線程環境下安全執行。
  • 使用場景:+load通常用於設置全局狀態、註冊類、交換方法實現(Method Swizzling)等,不建議在+load中進行耗時操作,因為它會影響應用啟動時間。

+initialize 方法

  • 調用時機:+initialize在類或其子類的第一個方法被調用之前調用,它是懶載入的,只有在類實際被使用時才會被調用。
  • 調用順序:如果子類沒有實現+initialize方法,那麼在子類的第一個方法被調用之前,父類的+initialize方法會被調用。如果子類實現了+initialize方法,那麼父類的方法不會被調用,除非子類的+initialize方法中顯式調用了[super initialize]
  • 繼承性:+initialize方法會被自動繼承,如果子類沒有提供+initialize的實現,那麼會調用父類的實現。
  • 線程安全:+initialize方法也是線程安全的,Objective-C運行時保證+initialize方法在多線程環境下安全執行,並且在每個類中只會被調用一次。
  • 使用場景:+initialize適合用於執行類的懶初始化,如初始化全局變數、修改靜態數據結構等。

註意事項

  • 避免在+load+initialize中編寫複雜或耗時的初始化代碼,這可能會影響應用的啟動性能。
  • +load+initialize都不應該依賴於其他類的初始化代碼,因為無法保證其他類的初始化順序。
  • 如果在+initialize中使用了多線程,要特別註意線程安全和死鎖問題,儘管+initialize本身是線程安全的。
  • +initialize中訪問靜態變數時,如果這些變數在其他地方被修改,需要註意同步問題。

其他

既然說這兩個是特殊方法,那麼有哪些非特殊的方法呢:

  1. 實例方法
    -init: 實例的初始化方法,通常在創建對象後手動調用或在構造器中調用。
    -dealloc: 實例被釋放時調用的方法,用於執行清理工作。
    -description: 返回對象描述的字元串,通常用於調試。
    以及其他自定義的實例方法,用於執行對象的具體行為。
  2. 類方法
    +new: 類方法,用於創建類的新實例,它會調用alloc和init。
    +someClassMethod: 自定義的類方法,用於執行與類相關的操作,而不是與特定實例相關的操作。

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 本文分享自天翼雲開發者社區《快照技術對比學習》,作者:z****n 1.快照的分類 根據 SNIA 的定義, 快照有全量快照 (full snapshot) 和增量快照 (incremental snapshot) 兩種類型。 2.全量快照 克隆(Clone): 與備份操作類似,克隆技術是一種數據復 ...
  • Zabbix監控 MS SqlServer2019 環境: Zabbix 7.0 LTS, sqlserver 2019 在mssql server的伺服器上安裝好agent2和插件: zabbix_agent2_plugins-7.0.0-windows-amd64.msi, 其中有mssql的必 ...
  • 前言 Oracle公司(甲骨文)是全球最大的信息管理軟體及服務供應商,成立於1977年,總部位於美國加州Redwood shore,面向全球開放oracle認證。 Oracle開發的關係資料庫產品因性能卓越而聞名,Oracle資料庫產品為財富排行榜上的前1000家公司所採用,許多大型網站也選用了Or ...
  • 一、問題發現 在一次數據遷移中,用到了INSERT INTO t1 SELECT * FROM t2這樣的 SQL 用來搬遷大表,為了提高插入效率關閉了Binlog,考慮用多線程來插入提高速度。表的類型信息和插入效率如下所示。 測試環境: Linux node-76-11 4.19.90-17.ky ...
  • 本文分享自華為雲社區《GaussDB(for MySQL)創新特性:靈活多維的二級分區表策略》,作者:GaussDB 資料庫。 背景介紹 分區表及二級分區表的功能,可以讓資料庫更加有效地管理和查詢大規模數據,傳統商業資料庫具備該能力。MySQL支持分區表,與傳統商業資料庫相比,MySQL對二級分區表 ...
  • 引言 隨著雲計算技術的發展,Amazon Web Services (AWS) 作為一個開放的平臺,一直在幫助開發者更好的在雲上構建和使用開源軟體,同時也與開源社區緊密合作,推動開源項目的發展。 本文主要探討2024年值得關註的一些開源軟體及其在AWS上的應用情況,希望能夠給大家參考使用! 2024 ...
  • 指標管理體系是一個結構化、系統化的方法論,旨在通過一系列精心設計的指標來衡量和指導組織的運營、決策和戰略實施過程。包括戰略對齊與目標設定、指標體系設計、管理流程標準化與自動化、監控與評估等多個核心環節。 本文聚焦於指標管理流程的標準化與自動化實踐,藉助袋鼠雲提供的專業指標管理平臺,將指標管理流程精煉 ...
  • OC中常用的多線程編程技術: 1. NSThread NSThread是Objective-C中最基本的線程抽象,它允許程式員直接管理線程的生命周期。 NSThread *myThread = [[NSThread alloc] initWithTarget:self selector:@selec ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...