Alamofire 網絡請求全流解析,通俗易懂

Alamofire 網絡請求全流程解析:從發起請求到處理響應

一、請求發起階段:準備你的"快遞"

1. 你告訴Alamofire要發什么"快遞"

// 就像告訴快遞員:"我要寄一個包裹給https://api.example.com"
AF.request("https://api.example.com/user", method: .get, parameters: ["id": 123])

2. Alamofire準備"符合Alamofire公司的快遞單"

準備階段
檢查URL是否合法
URLConvertible
添加HTTP方法
URLRequestConvertible
添加請求頭
添加參數
你的請求
創建URLRequest

URLRequestConvertible.swift文件中:創建URLRequest

public protocol URLRequestConvertible {func asURLRequest() throws -> URLRequest
}
// 把你要的地址變成真正的合理的快遞單

二、請求創建階段:把包裹交給快遞站

3. Session快遞站接收包裹

Session快遞站包裹SessionDelegateURLSession我要寄這個包裹創建DataRequest包裹登記這個包裹交給系統快遞員Session快遞站包裹SessionDelegateURLSession

Session.swift文件中:

func request(_ convertible: URLConvertible) -> DataRequest {// 創建包裹對象let request = DataRequest(...)// 登記包裹sessionDelegate.register(request, for: task)// 交給系統快遞員task.resume()return request
}

三、網絡傳輸階段:包裹在路上

4. 系統快遞員送包裹

網絡層
TCP連接
HTTP請求
路由
路由器
你的設備
互聯網
服務器

Alamofire在這一步使用系統的URLSession發送請求,就像使用專業的快遞公司運送包裹。

四、響應接收階段:包裹到達目的地

5. 服務器處理請求并返回結果

服務器系統快遞員快遞站管理員Request這是包裹的回執包裹狀態更新更新你的包裹狀態服務器系統快遞員快遞站管理員Request

SessionDelegate.swift中:

// 收到數據時
func urlSession(_ session: URLSession, dataTask: URLSessionDataTask, didReceive data: Data) {// 找到對應的包裹if let request = request(for: dataTask) {// 告訴包裹:"你收到新數據了!"request.didReceive(data: data)}
}

五、數據處理階段:拆包裹看內容

6. Alamofire幫你拆包裹

JSON
圖片
文本
原始數據
數據格式
JSONResponseSerializer
ImageResponseSerializer
StringResponseSerializer
解析為字典/數組
轉換為UIImage
轉換為字符串

ResponseSerialization.swift中:

public struct JSONResponseSerializer: ResponseSerializer {public func serialize(request: URLRequest?, response: HTTPURLResponse?, data: Data?) throws -> Any {// 把數據變成JSONreturn try JSONSerialization.jsonObject(with: validData, options: options)}
}

六、結果返回階段:把結果交給你

7. 最終結果回到你的手中

包裹包裹處理器原始數據處理好的數據這是你的結果!包裹包裹處理器

當你這樣寫代碼時:

AF.request(...).responseJSON { response in// 這里拿到最終結果print(response.value) // 拆開包裝的內容
}

在內部是這樣的:

func responseJSON(completionHandler: @escaping (AFDataResponse<Any>) -> Void) -> Self {// 添加一個"包裹處理器"appendResponseSerializer {// 處理數據...let result = Result { try JSONResponseSerializer().serialize(...) }// 把結果交給你completionHandler(DataResponse(...))}return self
}

七、完整流程圖:從開始到結束

你發起請求
創建URLRequest
Session創建DataRequest
SessionDelegate注冊任務
URLSession發送請求
服務器處理請求
返回響應數據
SessionDelegate接收數據
轉發給DataRequest
是否有響應處理器
執行序列化
返回處理結果
保存原始數據
回調給你的代碼

八、關鍵文件如何協作

步驟關鍵文件它做的事
1. 準備請求URLRequestConvertible.swift把你的請求變成標準格式
2. 創建請求Session.swift創建請求對象,交給系統
3. 發送請求URLSession (系統)真正發送網絡請求
4. 接收響應SessionDelegate.swift接收系統返回的數據
5. 處理數據ResponseSerialization.swift把原始數據變成有用的格式
6. 返回結果Request.swift把最終結果交還給你

九、用快遞比喻理解整個過程

  1. :顧客(想要發送或獲取數據)
  2. AF.request():你填寫快遞單
  3. Session:快遞站(管理所有包裹)
  4. DataRequest:你的包裹
  5. URLSession:真正的快遞員
  6. SessionDelegate:快遞站管理員(跟蹤包裹狀態)
  7. ResponseSerializer:包裹拆封員(打開包裹并檢查內容)
  8. responseJSON:最終把包裹里的東西交給你

當你說:"請幫我從https://api.example.com/user?id=123取東西"時:

  1. Alamofire準備快遞單(創建URLRequest)
  2. 把快遞單交給快遞站(Session)
  3. 快遞站登記包裹(創建DataRequest)
  4. 真正的快遞員出發(URLSession發送請求)
  5. 快遞員到達服務器取件
  6. 快遞員帶著包裹返回
  7. 快遞站管理員簽收(SessionDelegate接收數據)
  8. 拆封員打開包裹(ResponseSerializer處理數據)
  9. 把里面的東西交給你(回調你的代碼)

這樣,你就完成了一次網絡請求!Alamofire幫你處理了所有復雜的步驟,讓你可以輕松獲取網絡數據。


1. Alamofire (根目錄)

核心功能:框架入口與版本管理

  • Alamofire.swift:框架總入口,提供全局快捷方法 AF.request()

2. Core (核心引擎)

核心功能:網絡基礎架構實現

文件功能協作關系
Session.swift中央調度器,管理所有請求生命周期依賴 RequestSessionDelegate
Request.swift``DataRequest.swift``UploadRequest.swift``DownloadRequest.swift請求類型基類及具體實現Session 創建和管理
SessionDelegate.swiftURLSession 事件代理轉發橋接系統 URLSession 和 Alamofire 請求
Result.swift統一結果封裝 (Success/Failure)被所有響應處理器使用
Configuration.swift網絡配置 (超時/緩存策略等)初始化 Session 時注入

3. Extensions (功能擴展)

核心功能:增強系統類型能力

文件功能協作對象
URLConvertible.swift統一 URL 類型轉換被所有請求創建方法使用
URLRequestConvertible.swift標準化請求創建Session.request() 參數
HTTPHeaders.swift類型安全的 HTTP 頭管理請求配置階段使用
HTTPMethod.swiftHTTP 動詞枚舉請求創建時指定

典型擴展

// URLConvertible 協議允許多種輸入類型
public protocol URLConvertible {func asURL() throws -> URL
}
// String/URL/URLComponents 均實現該協議
AF.request("https://api.com") // 自動轉換

4. Features (高級特性)

核心功能:框架增值功能實現

(1) 安全模塊
文件功能
ServerTrustManager.swiftSSL 證書綁定管理
ServerTrustEvaluating.swift證書驗證策略實現
(2) 請求處理
文件功能
RequestInterceptor.swift請求攔截器 (認證/重試)
CachedResponseHandler.swift響應緩存策略
(3) 響應處理
文件功能
ResponseSerializer.swift響應數據序列化基類
JSONResponseSerializer.swiftJSON 解析實現
DecodableResponseSerializer.swiftCodable 支持
(4) 網絡監控
文件功能
NetworkReachabilityManager.swift網絡狀態監聽
EventMonitor.swift請求事件監聽器

協作示例 - 證書綁定流程:

成功
失敗
Session
ServerTrustManager
是否包含域名
PinnedCertificatesTrustEvaluator
DefaultTrustEvaluator
驗證證書鏈
允許連接
終止請求

5. Supporting Files (支撐系統)

核心功能:平臺適配與基礎設施

文件類型功能
Info.plist框架元數據配置
Alamofire.hObjective-C 橋接頭文件
module.modulemap模塊映射定義
LinuxMain.swiftLinux 平臺測試入口

關鍵協作機制分析

  1. 請求生命周期管理

    • Session 創建 Request 對象
    • SessionDelegate 監聽 URLSession 事件
    • 事件通過 Request 子類處理狀態轉換
  2. 線程安全實現

    // 專用隊列處理所有委托事件
    private let rootQueue = DispatchQueue(label: "org.alamofire.session.rootQueue")
    // 請求內部狀態機使用串行隊列
    private let stateQueue = DispatchQueue(label: "org.alamofire.request.stateQueue")
    
  3. 協議導向設計

    • URLConvertible:統一輸入源處理
    • RequestInterceptor:分離認證邏輯
    • EventMonitor:解耦事件監聽
  4. 性能優化技巧

    • 連接復用:通過共享 URLSession 實例
    • 零拷貝傳輸:InputStream 處理大文件
    • 懶加載:URLRequest 延遲創建

典型工作流:帶認證的API請求

// 1. 創建攔截器
let interceptor = AuthenticationInterceptor(adapter: adapter, retrier: retrier)// 2. 發起請求 (使用Extensions的URLConvertible)
AF.request("https://api.com/user", interceptor: interceptor) // Features模塊.validate()  // Core的Request擴展.responseDecodable(of: User.self) { // Features的Decodable序列化// 3. 處理響應
}

內部協作

  1. URLConvertible 轉換輸入URL
  2. RequestInterceptor 添加認證頭
  3. Session 創建 DataRequest
  4. DecodableResponseSerializer 解析響應
  5. EventMonitor 記錄請求時間線

以下是對 Alamofire 源碼模塊協作關系的全景解析,包含所有核心類及其交互關系:

Alamofire 模塊協作全景圖

Session
SessionDelegate
Request
Configuration
DataRequest
UploadRequest
DownloadRequest
SessionStateProvider
SessionTaskMetrics
URLConvertible
URLRequestConvertible
HTTPHeaders
RequestAdapter
HTTPMethod
ServerTrustManager
ServerTrustEvaluating
DefaultTrustEvaluator
PinnedCertificatesTrustEvaluator
RevocationTrustEvaluator
RequestInterceptor
Adapter
Retrier
CachedResponseHandler
ResponseSerializer
JSONResponseSerializer
DecodableResponseSerializer
StringResponseSerializer
NetworkReachabilityManager
EventMonitor
CompositeEventMonitor
SessionProvider
NotificationCenter

核心類關系詳解

1. Session (中央調度器)
  • 協作對象

    • Request:管理所有請求實例
    • SessionDelegate:處理底層 URLSession 回調事件
    • Configuration:網絡配置參數
  • 核心作用

    • 創建和管理所有網絡請求
    • 實現請求的隊列管理和優先級控制
    • 提供全局事件監控接口
2. SessionDelegate (代理轉發器)
  • 協作對象
    • SessionStateProvider:提供會話狀態信息
    • SessionTaskMetrics:收集性能指標
    • Request:轉發事件到具體請求
  • 核心作用
    • 實現所有 URLSessionDelegate 方法
    • 將系統事件分發給對應的 Request 對象
    • 處理 SSL 握手和認證挑戰
3. Request 繼承體系
Request
+state: State
+progress: Progress
+cancel()
+resume()
+suspend()
DataRequest
+response(queue:completionHandler:)
+responseData(queue:completionHandler:)
UploadRequest
+uploadProgress(queue:closure:)
DownloadRequest
+downloadProgress(queue:closure:)
+cancel(producingResumeData:)
4. 安全模塊協作
SessionSessionDelegateServerTrustManagerServerTrustEvaluating收到身份驗證挑戰獲取評估器選擇評估策略執行證書驗證返回驗證結果SessionSessionDelegateServerTrustManagerServerTrustEvaluating
5. 請求處理流程
重試
不重試
用戶發起請求
Session
RequestInterceptor
是否適配?
Adapter修改請求
創建Request對象
SessionDelegate注冊任務
URLSession執行請求
收到響應
是否失敗?
Retrier決定重試
返回錯誤
ResponseSerializer處理
返回結果
6. 響應序列化體系
ResponseSerializer
+serialize(request:response:data:error:)
DataResponseSerializerProtocol
DownloadResponseSerializerProtocol
JSONResponseSerializer
+options: JSONSerialization.ReadingOptions
DecodableResponseSerializer
+decoder: DataDecoder
StringResponseSerializer
7. 事件監控系統
監控事件
RequestCreated
Resumed
ReceivedData
Completed
Retried
Request
EventMonitor
CompositeEventMonitor
Logger
PerformanceMonitor
CustomMonitor

關鍵協作機制詳解

  1. 請求生命周期管理

    • Session 創建 Request 對象
    • Request 通過 SessionDelegate 注冊到 URLSession
    • 事件通過 SessionDelegateRequest 傳遞
    • EventMonitor 全程監控狀態變化
  2. 線程安全模型

    // 專用隊列處理委托事件
    private let rootQueue = DispatchQueue(label: "org.alamofire.session.rootQueue")// 請求狀態機使用串行隊列
    private let stateQueue = DispatchQueue(label: "org.alamofire.request.stateQueue")// 原子操作保護狀態
    private let protectedState: Protector<State> = Protector(State())
    
  3. 協議導向設計

    • URLRequestConvertible:統一請求創建接口
    public protocol URLRequestConvertible {func asURLRequest() throws -> URLRequest
    }
    
    • RequestInterceptor:分離認證邏輯
    public protocol RequestInterceptor: RequestAdapter, RequestRetrier {}
    
    • EventMonitor:解耦監控邏輯
    public protocol EventMonitor {func request(_ request: Request, didCreateTask task: URLSessionTask)
    }
    
  4. 性能優化關鍵點

    • 連接復用:通過共享 URLSession 實例
    • 零拷貝傳輸:InputStream 處理大文件
    open func upload(with stream: InputStream)
    
    • 延遲創建:URLRequest 在必要時創建
    • 內存優化:流式下載避免大內存占用

模塊協作價值分析

  1. 核心層 (Core)

    • 提供網絡基礎能力
    • 實現高性能的請求管理
    • 確保線程安全和資源管理
  2. 擴展層 (Extensions)

    • 統一接口規范
    • 增強類型安全性
    • 簡化API使用
  3. 特性層 (Features)

    • 模塊化可插拔設計
    • 提供企業級安全能力
    • 支持復雜業務場景
    • 完善的監控診斷體系
  4. 支持系統 (Supporting Files)

    • 多平臺適配保障
    • 框架元數據管理
    • 生態兼容性支持

Alamofire 的架構通過嚴格的職責分離和協議導向設計,實現了:

  • 擴展性:新增功能不影響核心邏輯
  • 可維護性:模塊邊界清晰
  • 性能:接近原生URLSession的效率
  • 開發體驗:簡化復雜網絡操作

這種設計使Alamofire能在保持輕量級(核心僅2000行代碼)的同時,提供企業級網絡解決方案,成為iOS開發中最廣泛使用的網絡庫之一。

設計哲學總結

  1. 分層架構

    • Core:網絡基礎
    • Extensions:協議擴展
    • Features:可插拔組件
  2. 關注點分離

    • 請求創建 vs 請求處理
    • 數據傳輸 vs 數據解析
    • 核心邏輯 vs 平臺適配

你問的是:Alamofire 內部對一個網絡請求每一步的數據流向和方法,圖文和代碼表示。


一、Alamofire 網絡請求全流程圖解

1. 流程圖(簡化版)

你(開發者)AlamofireSessionSessionDelegateURLSession服務器DataRequestAF.request(...)創建 DataRequest創建 URLSessionTask注冊 DataRequest 與 Task 映射發送 HTTP 請求返回響應/數據回調各類事件(數據、完成、錯誤等)分發事件到對應請求對象響應回調(如 responseJSON)你(開發者)AlamofireSessionSessionDelegateURLSession服務器DataRequest

2. 詳細步驟與關鍵方法

步驟1:開發者發起請求
AF.request("https://api.example.com/user", method: .get, parameters: ["id": 1])
步驟2:Alamofire 組裝請求
  • 通過 Session 創建 DataRequest 對象
  • 組裝 URL、參數、Header、Method
public func request(_ convertible: URLConvertible,method: HTTPMethod = .get,parameters: Parameters? = nil,encoding: ParameterEncoding = URLEncoding.default,headers: HTTPHeaders? = nil
) -> DataRequest
步驟3:Session 創建 URLSessionTask
  • 調用 URLSession.dataTask(with:) 創建底層任務
  • 通過 SessionDelegate 注冊 task 與 DataRequest 的映射
let task = urlSession.dataTask(with: urlRequest)
sessionDelegate.register(dataRequest, for: task)
步驟4:URLSession 發送請求
  • 由系統底層通過 TCP 發送 HTTP 請求到服務器
步驟5:服務器返回響應
  • 服務器返回數據,系統回調 URLSessionDelegate 相關方法
步驟6:SessionDelegate 事件分發
  • SessionDelegate 收到回調(如 didReceive datadidCompleteWithError
  • 通過 taskIdentifier 找到對應的 DataRequest
  • 調用 DataRequest 的處理方法
func urlSession(_ session: URLSession, task: URLSessionTask, didCompleteWithError error: Error?) {if let request = requests[task.taskIdentifier] {request.didComplete(error: error)}
}
步驟7:DataRequest 處理響應
  • 解析數據、序列化 JSON、處理錯誤
  • 最終通過回調(如 .responseJSON)返回給開發者
AF.request(...).responseJSON { response in// 這里處理結果
}

三、代碼片段串聯

// 1. 用戶發起請求
let request = AF.request("https://api.example.com/user", method: .get)// 2. Session 組裝 DataRequest
// 3. Session 創建 URLSessionTask
// 4. SessionDelegate 注冊映射
// 5. URLSession 發送請求
// 6. SessionDelegate 分發事件
// 7. DataRequest 處理響應
request.responseJSON { response inprint(response)
}

四、總結

  • 每一步的數據流向:開發者 -> Alamofire -> Session -> URLSession -> 服務器 -> URLSession -> SessionDelegate -> DataRequest -> 開發者
  • 每一步的關鍵方法AF.requestSession.requestURLSession.dataTaskSessionDelegate 回調、DataRequest 響應處理
  • 事件分發機制:通過 taskIdentifier 映射,實現請求與回調的精準對應

如需更詳細的源碼解讀、流程圖、或某一步的具體實現細節,歡迎隨時提問!


我是一個基于claude-4-sonnet-thinking技術的AI助手,在Cursor IDE環境中工作,隨時為您提供專業支持。

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

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

相關文章

鏈路聚合技術

鏈路聚合技術 鏈路聚合概述及應用場景 概述 鏈路聚合是把多條物理鏈路聚合在一起&#xff0c;形成一條邏輯鏈路。應用在交換機、路由器、服務器間鏈路&#xff0c;注意了&#xff0c;主機上面不能用鏈路聚合技術分為三層鏈路聚合和二層鏈路聚合鏈路聚合的作用 增加鏈路帶寬提供…

SpringCloud之Zuul

SpringCloud之Zuul 推薦參考&#xff1a;https://www.springcloud.cc/spring-cloud-dalston.html#_router_and_filter_zuul 1. 什么是Zuul Spring Cloud Zuul 是 Netflix 提供的微服務網關核心組件&#xff0c;作為統一的 API 入口&#xff0c;承擔請求路由、過濾、安全控制等…

低精度定時器 (timer_list) 和 高精度定時器 (hrtimer)

Linux 內核提供了兩種主要類型的定時器&#xff0c;以滿足不同的時間精度需求&#xff1a;低精度定時器 (timer_list) 和 高精度定時器 (hrtimer)。它們各有特點和適用場景。下面&#xff0c;我將分別提供它們在內核代碼中的簡化使用示例。1. 低精度定時器 (timer_list) 示例ti…

虛擬機VMware的使用方法

虛擬機VMware的使用方法VMware是全球領先的虛擬化技術提供商&#xff0c;其產品&#xff08;如VMware Workstation Pro&#xff09;允許用戶在單一物理機上運行多個操作系統&#xff08;OS&#xff09;&#xff0c;實現資源高效利用、隔離測試和靈活部署。本文將詳細介紹VMware…

冰島人(map)

#include<bits/stdc.h> using namespace std; struct people { string fat; int sex; }; map<string,people>mp; int pan(string s,string m) { string s1; int i0; while(s!“”) { int y0; s1m; while(s1!“”) { if(s1s&&(i<4||y<4)) return 0; s…

MS Azure Eventhub 發送 AD log 到cribl

1: 首先說一下,Cribl 提供了很多第三方的接口: 先看一下cribl 提供的接口界面: 注意到,上面提供的link 地址是 xxxxx:9093, 不鼠標放到撒謊給你嗎的? 上面,就可以看到了。所以要開的port 一定要把9093 開了,關于全部開的port: What ports do I need to open on the f…

電力名詞通俗解析5:計量系統

## 電網計量系統通俗講解&#xff1a;南網視角下的電力“精算師”想象一下&#xff0c;城市電網如同一個龐大而精密的“能量河流”&#xff0c;千家萬戶、工廠企業都在從中取水&#xff08;用電&#xff09;。如何精確計量每家用了多少“水”&#xff1f;如何確保“河流”輸送中…

關于redis各種類型在不同場景下的使用

Redis 提供了多種數據結構類型,每種類型適用于不同的場景。以下是 Redis 主要數據類型及其典型應用場景的詳細說明: 1. String(字符串) 特點:最簡單的鍵值存儲,值可以是字符串、整數或二進制數據(最大 512MB)。 適用場景: 緩存:存儲用戶會話、網頁內容等(如 SET u…

Vue 3 動態ref問題

目錄 1.問題描述 2.示例代碼 3.原因分析 4.解決方案 5.總結 1.問題描述 在Vue 3項目中&#xff0c;當使用動態ref來引用組件時&#xff0c;刪除組件后發現ref對象中對應的key仍然存在&#xff0c;只是值變為null&#xff0c;而不是完全刪除該key。 在一個可拖拽的卡片列表…

lazyvim恢復gt鍵

好的&#xff01;下面是一個完整的 LazyVim 鍵位配置 patch&#xff0c;將 gt / gT 恢復為 “切換標簽頁&#xff08;tab page&#xff09;” 的原始行為&#xff0c;同時保留原本 buffer 切換功能在其他鍵位上&#xff08;比如 / &#xff09;。 ? ? 恢復 gt 為 Tab 切換&a…

React Native 在 Web 前端跨平臺開發中的優勢與實踐

React Native 在 Web 前端跨平臺開發中的優勢與實踐 對于廣大 Web 前端開發者而言&#xff0c;移動端開發似乎總隔著一層“原生”的壁壘。學習 Swift/Kotlin、熟悉 Xcode/Android Studio 的高昂成本&#xff0c;讓許多人望而卻步。然而&#xff0c;“一次編寫&#xff0c;多端運…

QT控件 使用QtServer系統服務實現搭建Aria2下載后臺服務,并使用Http請求訪問Json-RPC接口調用下載退出

前言 最近了解到qt-solutions這個開源項目,仔細研究一番&#xff0c;發現其中的QtServer項目能在Windows系統中創建系統服務&#xff0c;Linux/Unix系統中能作為守護進程使用&#xff0c;之前一直以為編寫服務需要使用Windows api來實現&#xff0c;沒想到這么簡單。 本來之前就…

Python中關于數組的常見操作

Python中關于數組的常見操作 1.創建數組 array []2.添加元素 array.append()3.訪問元素 print(array[2])通過索引進行數組元素的訪問 4.修改元素 array[2] 3直接對想修改的元素位置進行賦值 5.刪除元素 array.remove(2) #刪除元素2del array[2] #刪除索引為2的元素6…

Image 和 IMU 時間戳同步

1 目錄 時間戳同步介紹 時間戳同步初探 時間戳獲取方式 時間戳延遲估計方法 姿態補償 勻速模型在 Bundle Adjustment 中的應用 重投影殘差 視覺特征勻速運動補償特征坐標 重投影殘差 基于特征勻速模型算法的實驗結果 軌跡勻速模型 vs 特征勻速模型 時間戳同步算法擴…

創建linux端口映射連接小網

&#x1f680; 方法 1&#xff1a;在執行機上配置 SSH 服務端轉發 這個做法是在 執行機上配置一個常駐 SSH 隧道&#xff0c;把大網的某個端口長期轉發到小網單板的 22 端口。 &#x1f468;?&#x1f4bb; 操作步驟 1?? 在執行機上創建一個 systemd 服務 假設&#xff1a; …

了解Java21

目前還沒有實操過從java8/java11直接到java17,java21。 先儲備下知識點&#xff0c;寫一些簡單例子&#xff0c;以便后續的實操。 一些新特性&#xff08;java8之后的&#xff09; var變量 和前端js定義變量一樣了&#xff0c;var搞定public static void main(String[] args) {…

【代碼】基于CUDA優化的RANSAC實時激光雷達點云地面分割

基于CUDA優化的RANSAC實時激光雷達點云地面分割 摘要&#xff1a; 本文介紹了一個高性能的激光雷達&#xff08;LiDAR&#xff09;地面分割項目。該項目基于RANSAC平面估計算法&#xff0c;并通過深度CUDA并行優化&#xff0c;將核心處理時間從近100ms縮短至10ms以內&#xff…

vuex原理以及實現

vuex官方文檔 Vuex是什么&#xff1f; Vuex 是一個專為 Vue.js 應用程序開發的狀態管理模式。它采用集中式存儲管理應用的所有組件的狀態&#xff0c;并以相應的規則保證狀態以一種可預測的方式發生變化 每一個 Vuex 應用的核心就是 store&#xff08;倉庫&#xff09;。“stor…

APIs案例及知識點串講(上)

一.輪播圖專題CSS代碼<style>* {box-sizing: border-box;}.slider {width: 560px;height: 400px;overflow: hidden;}.slider-wrapper {width: 100%;height: 320px;}.slider-wrapper img {width: 100%;height: 100%;display: block;}.slider-footer {height: 80px;backgro…

華大單片機HC32L110燒錄程序方法

1&#xff0c;安裝J-flash工具 從SEGGER官網下載J-flash工具&#xff0c;地址&#xff1a;SEGGER - The Embedded Experts - Downloads - J-Link / J-Trace。按向導安裝完成。 2&#xff0c;使用如下圖JLINK工具SWD模式連接單片機的燒錄接口&#xff08;SWDIO,SWCLK,GND&#…