都說swift取代oc,為何五年了依然是oc為主?

来源:https://www.cnblogs.com/simplepp/archive/2020/06/04/13043113.html
-Advertisement-
Play Games

1.先說現狀 現在國內公司開全新項目,Swift 已經占壓倒性優勢了。 很多以前是 OC 的項目也轉向 OC/Swift 混編了。 但是也有對包大小非常敏感的項目,還是純 OC 開發。不少公司剛剛擺脫 MRC 不久,業務壓力大,歷史包袱重,沒有時間推進新技術。 2. 對比一下 OC 和 Swift ...


1.先說現狀

現在國內公司開全新項目,Swift 已經占壓倒性優勢了。

很多以前是 OC 的項目也轉向 OC/Swift 混編了。

但是也有對包大小非常敏感的項目,還是純 OC 開發。不少公司剛剛擺脫 MRC 不久,業務壓力大,歷史包袱重,沒有時間推進新技術。

2. 對比一下 OC 和 Swift

總的來說,Swift 相對於 OC 來說,是進步的。Swift 有很多好的語言特性,能做更好的抽象。

說 Swift 線上崩潰 線下 Delay 的不怎麼會寫代碼吧?強類型能幫你糾正很多低級錯誤。Swift 不亂用不熟悉的特性,寫起來除了把 []換成.毫無區別,再不濟所有聲明都加上 @objc ,這夠狠了吧,要是還能出問題也稱不上合格的開發者了。

關於 OC 的黑魔法,能玩的也就是 runtime 了, Method/Class Swizzling, AOP,轉發等等。Swift 確實沒有這麼靈活,但是說實話大型項目,category 都不敢亂寫,就別說這些花活了,你寫的黑魔法不知道會影響到誰。要是你的騷操作給別人帶來了 bug,不得被人花式罵死?

我就遇到過兩次,一次是別人 hook 了 UI 組件的方法,我們這邊展示異常,百思不得其解,後來一條一條看調用棧才有了點眉目揪出了問題。

第二次差不多,別人 hook 了 UIAnimation 的方法,但是沒考慮周全,導致了崩潰,也是得看調用棧。

Swift 也有很多靈活的東西可以玩啊,比如方法=閉包,比 OC 那個靈活多了,@selector() 真的很不好用。

還有就是要吐槽 OC 沒有包名,有的時候真的欲哭無淚,無窮無盡的問題。

Xcode 對 Swift 的支持特別不好,代碼提示動不動就沒了,打開混編項目不用打字,放在那風扇就狂轉,續航從 10 小時降到 2 小時。還有最搞笑的,如果聲明一個數組,不顯式的指定類型,那就等著哭吧,編譯器會一個一個元素的去推斷類型,最後得出數組的範型。我試過聲明一個40個元素的數組,然後這個文件編譯了20分鐘。還好這個 bug 現在修掉了。

3. 對比一下 Swift 和 Kotlin

使用下來感覺 Swift 不如 Kotlin。Swift 的 API 不如 Kotlin,比如在可選型解包的的時候,要繁瑣的多。Kotlin 和 Java 能無縫對接,但是 Swift 和 OC 是兩門語言,混編的時候比較痛苦,主要是需要不斷的考慮,我用的特性 OC 支持不支持,這個類要不要暴露給 OC 使用,現在用了高級特性,萬一將來 OC 要調用要怎麼相容,很頭痛。

4. Swift ABI 變動

還拿 ABI 說事的也好多年沒寫代碼了吧?Swift 3 4 5 ABI 變動很小,遷移成本不高。另外 Xcode 會支持當前最新版本以及上一個版本的 Swift,比如現在最新的是 4.0,那 3.0 的代碼也可以編譯。

5. 關於 RN 和 Flutter

RN 有點涼的趨勢,最近蘋果的審核收緊了,RN 有可能被當作熱更新導致 APP 審核被拒了。

Flutter 大家還都是玩票,而且應用下來看崩潰率有點太高了。

另外就是 Dart 。。。。一切皆 widget 聽起來很美好,但是寫起來縮進看的快吐了。

推薦

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

-Advertisement-
Play Games
更多相關文章
  • 通過 此SQL,您可以從一個表複製信息到另一個表。 INSERT INTO SELECT 語句從一個表複製數據,然後把數據插入到一個已存在的表中。 語法 從一個表中複製所有的列插入到另一個已存在的表中 INSERT INTO table2 SELECT * FROM table1; 選擇指定的列 I ...
  • 1、'' is null為true,''和null是同一個東西。 神經病寫法:無論vc_itemids是null還是'',or後面的那一句都為false,判空只能使用is null 或者 is not null。下麵的vc_itemids只需要前面的判空就可以了。 分析: 2.低效的子查詢 神經病寫 ...
  • 1、一張表,裡面有 ID 自增主鍵,當 insert 了 17 條記錄之後,刪除了第 15,16,17 條記錄, 再把 Mysql 重啟,再 insert 一條記錄,這條記錄的 ID 是 18 還是 15 ? (1)如果表的類型是 MyISAM,那麼是 18 因為 MyISAM 表會把自增主鍵的最大 ...
  • pyetl是一個純python開發的ETL框架, 相比sqoop, datax 之類的ETL工具,pyetl可以對每個欄位添加udf函數,使得數據轉換過程更加靈活,相比專業ETL工具pyetl更輕量,純python代碼操作,更加符合開發人員習慣 安裝 pip3 install pyetl 使用示例 ...
  • 1. 前言 之前寫過一篇博客,講解的是Redis的5種數據結構及其常用命令,當時有讀者評論,說希望瞭解下這5種數據結構各自的使用場景,不過一直也沒來得及寫。 碰巧,在3月份找工作面試時,有個面試官先問了我Redis有哪幾種數據結構,在我講完後,面試官又問了我以下問題: 如何用Redis實現微信步數排 ...
  • 打開虛擬機進入linux系統 進入Hadoop目錄下 多用tab鍵 它可以自動補齊命令 1. 啟動Hadoop集群 start-all.sh 等價於 start-dfs.sh 和 start-yarn.sh 2. 關閉Hadoop集群 stop-all.sh 3. 查看啟動的服務進程 jps 4. ...
  • 什麼叫大數據,“大”,說的並不僅是數據的“多”!不能用數據到了多少TB ,多少PB 來說。 對於大數據,可以用四個詞來表示:大量,多樣,實時,不確定。 也就是數據的量龐大,數據的種類繁雜多樣話,數據的變化飛快,數據的真假存疑。 大量:這個大家都知道,想百度,淘寶,騰訊,Facebook,Twitte ...
  • 今天和大家分享一下,iOS開發3-5年應該掌握的技能。 大大小小參加過不下30+公司的面試,其中不乏BAT、TMD等一線互聯網公司,總結一下,發現大廠招聘都有一個共性。 對技術的要求很全面,有些開發者認為iOS掌握了基礎的UI、網路、記憶體、多線程等等就夠了,其實要想更好的應付iOS的面試,這些是遠遠 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...