iOS知識復習

block原理

OC block 是個結構體,內部有個一個結構體成員 專門保存 捕捉對象

Swift閉包 是個函數,捕獲了全局上下文的常量或者變量

修改數組存儲的內容,不需要加_block,修改數組對象本身時需要

weak原理

Weak 哈希表 (散列表),一個關鍵字 映射幾個存儲值,提高查詢效率,釋放時候遍歷釋放

引用計數retaincount的值 存在 isa指針中,過大會存在一個sidetable中

Isa指針是指向對象所屬類/元類的指針,每個對象都有一個isa指針

Weak會自動置為nil,unsafe unretain不會,容易出現野指針

category原理

category_t的結構體,存儲類名,方法列表

運行時添加方法,同名方法會存放在前面,導致執行時執行了category的方法

objc_msgSend(receiver, selector)

對象是動態類型,可以在運行時向對象發送消息,也就是某個方法沒有實現,編譯不會報錯。

根據isa指針 找到 實際所屬的類,然后在該類的方法列表 及 父類的方法列表,找到后運行,再最頂層父類找不到對應方法,則unrecognized selector 異常

類方法 其實在runtime 層還是實例方法

Runloop 是一個一直在執行的while循環,主線程默認開啟,子線程需要手動開啟,有3種源,執行時會判斷timer sourece0 source1,應用 基本的scroll滑動時,timer會停止,需要添加到runloop trackmode中。其他例如autoreleasepool 等一次runloop執行會釋放一次池,事件響應,手勢,UI更新,timer

Autoreleasepool大括號作用域結束后釋放,數據結構是個雙向鏈表

元類meta_class 作用

1、支持動態方法解析,當對象方法不存在時,嘗試從繼承鏈中查找/動態添加方法

2、支持類別,當類別擴展了類的功能時,元類負責管理類別的新增方法 及原有方法

3、完整對象和類的關系,是描述類的類

4、消息轉發機制的基礎,

class_copyIvarList所有屬性及大括號中的變量

class_copyPropertyList聲明的屬性

class_ro_t 類在編譯器確定的屬性 方法 協議,沒有分類的方法。只讀

class_rw_t 運行時生成的

KVO 原理

addObserver時,創建了新的子類,并將對象轉為新子類的對象,在新子類中添加willchange didchange方法

關閉autoNotifyObserver后,需要手動調will didchange觸發

函數返回一個對象時,會對對象 autorelease ,延長對象生命周期

懸垂指針- 只留下了指針,內存釋放了,指針沒釋放

五大區,棧(系統) 堆(程序) 靜態 字符串常量 代碼區

類別添加屬性,通過關聯對象,存儲在全局的一個哈希表中

performselector after 子線程中不起作用,原理是內部起了timer處理,而子線程中runloop默認沒有,timer就不起作用

Dispatch after 原理是延遲執行,而不是到達延遲時間后執行

檢測卡頓:

使用cadisplaylink監控FPS ,簡單直觀但無法定位堆棧

監聽runloop,閥值不好控制,能定位堆棧

Ping主線程,能定位堆棧,能記錄卡頓時間,閥值

反射:類 協議 selector

TCP/IP 五層協議 物理層 數據鏈路層 網絡層 傳輸層 應用層

大文件:邊下載邊存入本地,避免占用大內存 NSFileManager

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/82220.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/82220.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/82220.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

手眼標定:九點標定、十二點標定、OpenCV 手眼標定

因為一直使用6軸協作機器人,且主要應用是三維視覺,平常的手眼標定基本都是基于OpenCV來計算的,聽說有九點標定和十二點標定,順便了解下。 目錄 1.九點標定1.1 基本原理1.2 關于最小二乘法1.3 具體示例 2.十二點標定3.OpenCV 手眼標…

CSS之元素定位

元素定位 一、什么是元素定位 元素定位(CSS Positioning) 是指通過CSS的 position 屬性控制HTML元素在頁面中的布局方式。它決定了元素如何相對于其父元素、視口或其他元素進行位置調整。 CSS的 position 屬性用于控制元素在頁面上的定位方式&#xff…

測試工程師如何通俗理解和入門RAG:從“查資料”到“寫答案”的智能升級

1. 為什么要學習RAG?——從“查資料”到“寫答案”的飛躍 背景:你已經掌握了Embedding技術,能將文檔、代碼、測試用例等離散信息轉化為向量,用于相似度匹配。 痛點:但僅靠向量匹配找到相關文檔后,如何快速生成答案?如何避免“找到文檔卻不會總結”的尷尬? RAG的價值:…

數量優勢:使用Bagging和Boosting的集成模型

文章目錄 裝袋法(Bagging)和提升法(Boosting)利用集成學習創建強大的模型裝袋法(Bagging):為機器學習模型增加穩定性裝袋法示例 提升法(Boosting):減少弱學習…

5G基站選擇±10ppm晶振及低相噪技術解析

在5G通信技術飛速發展的時代,5G基站作為核心基礎設施,其性能的優劣直接影響著整個通信網絡的質量。晶振作為5G基站中的關鍵器件,對基站的頻率穩定性、信號傳輸質量等起著至關重要的作用。 5G基站對晶振的要求 (一)高…

嵌入式<style>設計模式

每天分享一個web前端開發技巧。 今天分享的主題是&#xff0c;如何提升前端代碼的內聚性。我們在寫<style></style>的時候&#xff0c;往往把大量無關聯的樣式寫在同一個<style>下&#xff0c;而且離相關的html元素很遠&#xff0c;這樣導致每次想修改某個元…

簡單數學板子和例題

線性丟番圖方程 axbyc dgcd(a,b)&#xff0c;若c|d&#xff0c;有無窮整數解 x x 0 b d n , y y 0 ? a d n xx_0{b\over d}n,yy_0-{a\over d}n xx0?db?n,yy0??da?n POJ 1265 poj真難用&#xff0c;abs一直報錯&#xff0c;萬能頭也不能用&#xff0c;給我調紅溫了 …

深度解析視頻剪輯SDK開發:從AI字幕提取到多端原生插件集成-優雅草卓伊凡

深度解析視頻剪輯SDK開發&#xff1a;從AI字幕提取到多端原生插件集成-優雅草卓伊凡 引言&#xff1a;視頻剪輯技術的演進與市場需求 近年來&#xff0c;短視頻和社交媒體的爆發式增長推動了視頻剪輯技術的快速發展。優雅草卓伊凡及其團隊近期接到一個客戶需求&#xff1a;開…

對WireShark 中的EtherCAT抓包數據進行解析

對WireShark 中的EtherCAT抓包數據進行解析 EtherCAT數據包結構 EtherCAT數據幀結構如下&#xff1a; 采用 Python 實現對 EtherCAT 數據包進行解析 import numpy as np import matplotlib.pyplot as plt from IPython import embed from collections import Counter import …

基于SpringBoot的校園電競賽事系統

博主介紹&#xff1a;java高級開發&#xff0c;從事互聯網行業六年&#xff0c;熟悉各種主流語言&#xff0c;精通java、python、php、爬蟲、web開發&#xff0c;已經做了六年的畢業設計程序開發&#xff0c;開發過上千套畢業設計程序&#xff0c;沒有什么華麗的語言&#xff0…

數據湖和數據倉庫的區別

在當今數據驅動的時代&#xff0c;企業需要處理和存儲海量數據。數據湖與數據倉庫作為兩種主要的數據存儲解決方案&#xff0c;各自有其獨特的優勢與適用場景。本文將客觀詳細地介紹數據湖與數據倉庫的基本概念、核心區別、應用場景以及未來發展趨勢&#xff0c;幫助讀者更好地…

Mysql 刷題Day09

LC 585 2016年的投資 思路&#xff1a; 本題思路好想 &#xff0c; 就是把2015年投資相同的找出來 &#xff0c;再找出這其中經緯度不同的id對應的2016年的保險。 實際操作中&#xff0c; 發現用group by很麻煩&#xff0c; 那么想到窗口函數也能 分組進行統計 利用 count(…

Lambda表達式的方法引用詳解

Lambda表達式的方法引用詳解 1. 方法引用的概念與作用 定義:方法引用(Method Reference)是Lambda表達式的一種簡化寫法,允許直接通過方法名引用已有的方法。核心目的:減少冗余代碼,提升可讀性,尤其在Lambda僅調用一個現有方法時。語法符號:雙冒號 ::。2. 方法引用的四種…

記錄python在excel中添加一列新的列

思路是&#xff0c;先將需要添加為新的列存儲到一個暫時的列表中&#xff0c;然后用到以下函數來存儲 data_.loc[:, "新列的名字"] save_list_ 上面的save_list_就是暫時存儲了信息的列表了。 以下是我的代碼&#xff0c;供以后快速回憶。 schools_data {"98…

關于flutter中Scaffold.of(context).openEndDrawer();不生效問題

原因&#xff1a; 在 Flutter 中&#xff0c;Scaffold.of(context) 會沿著當前的 context 向上查找最近的 Scaffold。如果當前的 widget 樹層級中沒有合適的 Scaffold&#xff08;比如按鈕所在的 context 是在某個子 widget 中&#xff09;&#xff0c;就找不到它。 解決辦法…

財管-1-財務分析、評價和預測

1.因素分析法&#xff1a; 報告期&#xff08;實際&#xff09;指標M1A1 * B1 * C1 基 期&#xff08;計劃&#xff09;指標M0A0 * B0 * C0……&#xff08;1&#xff09; 第一次替代 A1 * B0 * C0……&#xff08;2&#xff09; 第二次替代 A1 * B1 * C0……&#xff08;3…

golang逃逸分析

1.1 逃逸分析是什么 逃逸分析是指編譯器在執行靜態代碼分析后&#xff0c;對內存管理進行的優化和簡化。 在編譯原理中&#xff0c;分析指針動態范圍的方法被稱為逃逸分析。通俗來講&#xff0c;當一個對象的指針被多個方法或線程引用時&#xff0c;則稱這個指針發生了逃逸。…

Meetily:AI會議記錄,開源、免費、好用(本地AI實時轉錄、隱私保護一步到位!)

名人說:博觀而約取,厚積而薄發。——蘇軾《稼說送張琥》 創作者:Code_流蘇(CSDN)(一個喜歡古詩詞和編程的Coder??) 目錄 一、初識Meetily:什么是真正的智能會議助手?1. 核心優勢一覽2. 技術架構揭秘二、實戰體驗:從安裝到使用的完整流程1. 系統要求2. 快速安裝指南Wi…

.NET ORM開發手冊:基于SqlSugar的高效數據訪問全攻略

SqlSuger是一個國產&#xff0c;開源ORM框架&#xff0c;具有高性能&#xff0c;使用方便&#xff0c;功能全面的特點&#xff0c;支持.NET Framework和.NET Core&#xff0c;支持各種關系型數據庫&#xff0c;分布式數據庫&#xff0c;時序數據庫。 官網地址&#xff1a;SqlS…

【論文閱讀】KIMI-VL TECHNICAL REPORT

KIMI-VL TECHNICAL REPORT 原文摘要 核心模型&#xff1a;Kimi-VL 模型架構&#xff1a;基于 MoE 設計&#xff0c;僅激活語言解碼器的 2.8B 參數&#xff08;Kimi-VL-A3B&#xff09;&#xff0c;在保持高效計算的同時實現高性能。 MoE&#xff08;Mixture of Experts&#xf…