91aaa在线国内观看,亚洲AV午夜福利精品一区二区,久久偷拍人视频,久久播这里有免费视播

<strong id="fvuar"></strong>

  • <sub id="fvuar"><dl id="fvuar"><em id="fvuar"></em></dl></sub>

    1. 千鋒教育-做有情懷、有良心、有品質(zhì)的職業(yè)教育機(jī)構(gòu)

      手機(jī)站
      千鋒教育

      千鋒學(xué)習(xí)站 | 隨時(shí)隨地免費(fèi)學(xué)

      千鋒教育

      掃一掃進(jìn)入千鋒手機(jī)站

      領(lǐng)取全套視頻
      千鋒教育

      關(guān)注千鋒學(xué)習(xí)站小程序
      隨時(shí)隨地免費(fèi)學(xué)習(xí)課程

      當(dāng)前位置:首頁(yè)  >  技術(shù)干貨  > 為什么SwiftUI用struct來表示view?

      為什么SwiftUI用struct來表示view?

      來源:千鋒教育
      發(fā)布人:xqq
      時(shí)間: 2023-10-11 15:35:43 1697009743

      一、SwiftUI用struct來表示view的原因

      首先,涉及一個(gè)性能原理:結(jié)構(gòu)體比類更簡(jiǎn)單,更輕量。之所以名列前茅個(gè)說這個(gè)原因,是因?yàn)榇蠖鄶?shù)都認(rèn)為這是 SwiftUI 采用結(jié)構(gòu)體的主要原因。其實(shí),縱觀全局,這只是原因之一。

      在 UIKit 中,所有的視圖都繼承自一個(gè)叫UIView的類,它有非常多的屬性和方法 —— 背景顏色,布局約束,用于渲染的層,等等。還有更多諸如此類的屬性,而每一個(gè)UIView和UIView的子類都有,因?yàn)檫@正是繼承的工作方式。

      通常這樣也不會(huì)帶來問題,但有一個(gè)特殊的子類UIStackView,它和 SwiftUI 里的VStack和HStack相似。在UIKi 里,出于使布局更簡(jiǎn)單的設(shè)計(jì)意圖,UIStackView是一個(gè)不會(huì)被渲染的視圖類型。但由于繼承機(jī)制,盡管它不渲染,它也有那些包括背景顏色在內(nèi)的各種用不上的屬性。

      在 SwiftUI 中,所有的視圖都是細(xì)碎的結(jié)構(gòu)體,創(chuàng)建開銷幾乎可以忽略。 想象一下:你創(chuàng)建了一個(gè)結(jié)構(gòu)體,持有一個(gè)整數(shù),整個(gè)結(jié)構(gòu)體的大小只有——那個(gè)整數(shù),再無(wú)其他。沒有從父類、爺爺類、爺爺?shù)臓敔旑惸抢锢^承來的“意外財(cái)產(chǎn)”。它所包含的一切你都看得見。

      得益于現(xiàn)代 iPhone 的能力,創(chuàng)建 1000 甚至 100,000 個(gè)整數(shù)只在眨眼之間。對(duì)于 SwiftUI 的 1000 個(gè) view 或者 100,000 個(gè) view。這個(gè)時(shí)間仍然成立。太快了,你都不必考慮它們。

      不過,除了性能,用 struct 表示 view 還有其他重要原因:它強(qiáng)迫我們以一種更干凈的方式隔離狀態(tài)。類可以自由地修改它的值 —— 這可能導(dǎo)致更凌亂的代碼,這樣的話 SwiftUI 就無(wú)法通過某個(gè)值的變化來自動(dòng)更新 UI 了。

      通過創(chuàng)建不會(huì)跟隨時(shí)間改變的視圖,SwiftUI 鼓勵(lì)我們遷移到一種可以更好地工作的設(shè)計(jì)方式:視圖變簡(jiǎn)單,變“蠢”,它只做把數(shù)據(jù)變成 UI 的事情,而不是滋生出控制邏輯這樣更“智能”的工作。

      當(dāng)你審視什么樣的東西在 SwiftUI 中可以作為一個(gè) view 的時(shí)候,你就會(huì)發(fā)現(xiàn)前面說的方式正在運(yùn)作。我們用?Color.red?和?LinearGradient?作為視圖 —— 一些存儲(chǔ)非常簡(jiǎn)單數(shù)據(jù)的細(xì)碎類型。實(shí)際上,相對(duì)于把?Color.red?直接當(dāng)成 view,你找不到更好的方案了。除了“把我的空間填滿紅色”,它沒有攜帶其他任何多余的信息。

      作為比較,你可以看下 Apple 的UIView文檔。上面列出了200 多個(gè)UIView的屬性和方法 ——不管子類需不需要,都拿著。

      提示:如果你試圖給你的 view 用上 class,那么代碼要么編譯不過要么就會(huì)崩潰。不要猶豫:用 struct 。

      延伸閱讀:

      二、視圖值樹是什么

      在 SwiftUI 中,視圖是狀態(tài)的函數(shù)。

      開發(fā)者通過符合 View 協(xié)議的結(jié)構(gòu)體來聲明界面,SwiftUI 通過調(diào)用結(jié)構(gòu)體實(shí)例的 body 獲取對(duì)應(yīng)的視圖值。body 則根據(jù)用戶的界面描述和對(duì)應(yīng)的依賴(Source of truth)計(jì)算結(jié)果。

      在 app 運(yùn)行后進(jìn)行名列前茅次渲染時(shí),SwiftUI 將依據(jù)類型樹按圖索驥,創(chuàng)建類型實(shí)例,實(shí)例的 body 根據(jù)初始狀態(tài)計(jì)算視圖值,并組織成視圖值樹。需要?jiǎng)?chuàng)建哪些實(shí)例,則是根據(jù)當(dāng)時(shí)的狀態(tài)決定的,每次的狀態(tài)變化都可能會(huì)導(dǎo)致最終生成的視圖值樹不同(可能僅是某個(gè)節(jié)點(diǎn)的視圖值發(fā)生變化,也可能是視圖值樹的結(jié)構(gòu)都發(fā)生了巨大的變化)。

      當(dāng) State 發(fā)生變化后,SwiftUI 會(huì)生成一棵新的視圖值樹(Source of truth 沒有發(fā)生變化的節(jié)點(diǎn),不會(huì)重新計(jì)算,直接使用舊值),并同老的視圖值樹進(jìn)行比對(duì),SwiftUI 將對(duì)其中有變化的部分重新布局渲染,并用新生成的視圖值樹取代老的視圖值樹。

      視圖值樹通常只保存當(dāng)前布局、渲染所需的內(nèi)容(個(gè)別情況下,會(huì)緩存少數(shù)不參與布局、渲染的視圖值),在 app 的生命周期中,隨著 State 的變化而不斷地變化。

      聲明:本站稿件版權(quán)均屬千鋒教育所有,未經(jīng)許可不得擅自轉(zhuǎn)載。
      10年以上業(yè)內(nèi)強(qiáng)師集結(jié),手把手帶你蛻變精英
      請(qǐng)您保持通訊暢通,專屬學(xué)習(xí)老師24小時(shí)內(nèi)將與您1V1溝通
      免費(fèi)領(lǐng)取
      今日已有369人領(lǐng)取成功
      劉同學(xué) 138****2860 剛剛成功領(lǐng)取
      王同學(xué) 131****2015 剛剛成功領(lǐng)取
      張同學(xué) 133****4652 剛剛成功領(lǐng)取
      李同學(xué) 135****8607 剛剛成功領(lǐng)取
      楊同學(xué) 132****5667 剛剛成功領(lǐng)取
      岳同學(xué) 134****6652 剛剛成功領(lǐng)取
      梁同學(xué) 157****2950 剛剛成功領(lǐng)取
      劉同學(xué) 189****1015 剛剛成功領(lǐng)取
      張同學(xué) 155****4678 剛剛成功領(lǐng)取
      鄒同學(xué) 139****2907 剛剛成功領(lǐng)取
      董同學(xué) 138****2867 剛剛成功領(lǐng)取
      周同學(xué) 136****3602 剛剛成功領(lǐng)取
      相關(guān)推薦HOT
      TCP擁塞控制算法—優(yōu)缺點(diǎn)、適用環(huán)境、性能分析?

      一、TCP擁塞控制算法面向連接的TCP和無(wú)連接的UDP在擁塞發(fā)生時(shí)對(duì)擁塞指示的不同反應(yīng)和處理,導(dǎo)致對(duì)網(wǎng)絡(luò)資源的不公平使用問題。在擁塞發(fā)生時(shí),有...詳情>>

      2023-10-11 17:11:33
      webpack中的url-loader和file-loader有哪些區(qū)別?

      一、webpack中的url-loader和file-loader的區(qū)別1、文件輸出方式不同file-loader會(huì)將文件輸出到指定的輸出目錄,并返回文件的URL地址。url-loade...詳情>>

      2023-10-11 17:03:14
      為什么iOS始終不支持應(yīng)用雙開深度分析給你答案?

      一、為什么iOS始終不支持應(yīng)用雙開應(yīng)用雙開的根本目的我們先從用戶需求的角度來看問題。絕大多數(shù)人需要應(yīng)用雙開,只是因?yàn)橐粋€(gè)APP:微信。我們之...詳情>>

      2023-10-11 16:49:08
      什么是N+1問題,如何解決 Laravel 的 N+1 問題?

      一、N+1問題介紹在基本級(jí)別,ORM 是 “懶惰” 加載相關(guān)的模型數(shù)據(jù)。但是,ORM 應(yīng)該如何知道你的意圖?在查詢模型后,您可能永遠(yuǎn)不會(huì)真正使用相...詳情>>

      2023-10-11 16:47:26
      高并發(fā)、高吞吐是什么?

      一、高并發(fā)、高吞吐高吞吐量指的是系統(tǒng)能夠快速處理大量請(qǐng)求的能力,也就是處理更多的請(qǐng)求數(shù)量。高并發(fā)指的是系統(tǒng)能夠同時(shí)處理多個(gè)請(qǐng)求的能力,...詳情>>

      2023-10-11 16:43:53
      快速通道