原创 Flutter TextField開始輸入中文的時候,被打斷導致錯誤輸入字母問題

一、Bug樣例 建立一個web demo flutter run -d chrome --web-renderer html      出現問題: 輸入中文的時候,比如打字 hao, 第一個字母h會先輸入,變成  h奧   二、解決  

原创 2022到2023

2022年到2023年,工作內容發生了很大變化。 原來在字節主要做iOS平臺上的業務開發,使用Swift語言。後面新的工作內容主要做IoT相關,不再侷限在移動端,而是圍繞整個IoT系統。 從iOS介入到後端開發之後,處理事情發生很多的變化。

原创 Xcode Debugger Extremely Slow , Xcode Swift調試器調試時極其慢(😡)

一、Xcode 調試器   我的項目是國內某辦公軟件的iOS客戶端, 代碼量極其龐大, 編譯一次至少30min以上。   關鍵是,如果你遇到問題的時候,調試下斷點,需要至少5min才能斷下來,走下一步,又重複同樣的流程   二、問題排查  

原创 爲什麼SwiftUI使用struct, 限制使用class

前言 在學習SwiftUI所有的地方,視圖元素都定義一個struct並實現View協議,該協議定義body變量返回View類型。 但是爲什麼,這裏一直是指定的struct, 而不是class呢? 嘗試使用class 如果你使用class 在

原创 SwiftUI Stack中的View被壓縮的效果

一、背景   我們在佈局中,經常會遇到視圖元素排列時空間不足或者空間過大的情況,在這種場景下面,不同的佈局方式有不同的方法:   絕對佈局frame:純靠計算過程控制,獲取父視圖的大小,根據需求,計算自己需要的大小,並設置到frame上去

原创 Swift 計算字符串展示的區域

一、如果是普通文本,那麼可以採用NSString的方法,代碼如下: import UIKit import PlaygroundSupport class MyViewController : UIViewController {

原创 FlexBox 行間距

問題背景 在Flex佈局方式下, 父容器約定是換行的方式, 不足以容納一行子元素的時候, 會單獨進行折行, 那麼折行的行間距如何處理呢?   解決辦法 通過在子Item上面設置margin-top可以模擬出折行之後, 下面一行距離上面一行的

原创 swift_slowAlloc Crash 分析

一、Crash詳情 Crash類型 exception EXC_BREAKPOINT (SIGTRAP) reason EXC_BREAKPOINT EXC_ARM_BREAKPOINT fault_address:0x000000018

原创 Swift Lazy計算屬性的線程安全分析

一、代碼示例 // // ViewController.swift // LazyTest // // Created by lilun.ios on 2021/7/30. // import UIKit class ViewC

原创 Swift全局變量的線程安全分析

一、示例代碼 import UIKit let obj = TestObj() class TestObj { init() { print("\(type(of: self)) init") } }

原创 Swift 與 Objc Exception

一、背景   Swift具備完善的Error handle機制,對於純Swift下面的Error,在編碼的時候能夠正確處理。   在使用try? 處理拋出Error的方法的時候,會忽略Error,直接返回nil   二、Swift 與 Ob

原创 Swift 模式下面LLDB 輸出對象

(lldb) expr -l Swift -- import UIKit (lldb) expr -l Swift -- let $pin = unsafeBitCast(0x7f81c8d459f0, to: UILabel.self)

原创 Understanding Swift’s value type thread safety - 代碼分析(二)

示範代碼 ` func testScenarioA2() throws { var store: Int = 100 DispatchQueue.concurrentPerform(iterations: 1_000_000

原创 Understanding Swift’s value type thread safety - 代碼分析(一)

結構體並不代表線程安全,swift在此上未做保證 func testScenarioA() throws { var store: Int = 0 DispatchQueue.concurren

原创 Swift Copy On Write 多線程下面的資源競爭

Swift中的String、Array、Dictionary等容器類型默認實現了寫時複製,這個操作在多線程下面可能會帶來錯誤 https://bugs.swift.org/browse/SR-6543