
Lydia Lu
@LydiaLuCode
Followers
0
Following
0
Media
82
Statuses
82
Joined May 2025
【OperationQueue 的 cancel 是真的會取消嗎?】 不完全會。 1.cancel() 只改變狀態,不會強制終止。 2.任務未開始:可能不會執行。 3.執行中:要在 main() 內檢查 isCancelled,手動中止流程。 *真正取消 = 程式邏輯中主動偵測與停止。 #SwiftOperation #ConcurrencyTips #GCD
0
0
0
【dispatchGroup 與 async let 差在哪?】 都可實現並行,但用途與語法不同。 dispatchGroup 適用 GCD 架構、Obj-C 混用情境 手動 enter/leave,寫法較繁瑣 不支援 async/await 函式 async let Swift 5.5+ 專屬,搭配 async/await 語法簡潔,編譯器自動管理 僅能在 async function 中使用 #GCD
0
0
0
【什麼是 race condition?】 多執行緒「同時」讀寫共享資源,順序不確定,可能造成錯誤結果。 常見情境: 1.同時修改同一變數 2.沒同步就存取資料 3.判斷與操作之間有時間差 #SwiftConcurrency #RaceCondition #GCD
0
0
0
【URLRequest timeoutInterval 預設值是多少?】 - 掌握連線逾時機制。 URLRequest的timeputInterval預設值為:60秒(TimeInterval = 60.0) 當使用URLSession.shared或未自訂timeoutInterval的情況下,若60秒內沒有收到回應,請求就會被中斷並丟出錯誤。 #Networking #SwiftAPI #API
0
0
0
【JSONDecoder 的 decodingStrategy ?】 keyDecoding: .useDefaultKeys:key 完全相符 .convertFromSnakeCase:自動轉 camelCase .custom:自訂轉換邏輯 dateDecoding: .deferredToDate(預設) .secondsSince1970 / .millisecondsSince1970 .iso8601 / .formatted(DateFormatter) .custom自訂解析
0
0
0
【URLSession.shared 和自訂 Session 差在哪?】 .shared:共用單例,適合簡單 API,無法調整 timeout、快取、cookie、delegate。 自訂:URLSession(configuration:) 可調整 timeout、cache、背景下載、用 delegate 控進度或認證,彈性高,實務開發常用。 #SwiftAPI #URLSessionTips #API
0
0
0
【API call 放在 View 還是 ViewModel?】 - 架構分層的實務分析。 API call 應該放在 ViewModel,不是View。 原因: View 負責顯示畫面 -> 不應該涉及邏輯處理。 ViewModel 管理資料與邏輯 -> 負責觸發 API、處理結果並轉為 UI 可用資料。 #MVVM #Networking #iOSBestPractice #MVC #MVVM
0
0
0
【該用 Singleton 還是注入?】 Singleton:適合全域唯一(如 Logger、Session),但耦合高、不利測試與模組化。 Dependency Injection:可 Mock、易測試、彈性高,適用多實例與擴充,但初期設計較複雜。 ✅ 建議:能注入就注入,保留彈性。 #SwiftArchitecture #Singleton #DependencyInjection
0
0
0
【MVVM 的 ViewModel 是否該知道 View?】 理論上不該,ViewModel 若持有View,會造成雙向依賴、降低可測試性與重用性。 理想:ViewModel 透過@Published、closure暴露資料。View單向綁定自動更新。不持有UIView/VC。 妥協:小專案常callbackUI(如loading/alert) 若耦合 UIKit,架構易崩壞 #MVVM
0
0
0
【什麼情況會造成 unowned crash?】 當被 unowned 捕捉的物件在 closure 執行前已釋放,強制解參考會導致 crash(野指標)。 防呆策略: 改用 [weak] + guard let。 確保目標生命週期長於 closure。 僅用於「絕不釋放」對象,如常駐 delegate。 #UnownedCrash #SwiftARC #ARC
0
0
0
【ARC 是 compile-time 還是 runtime?】 ARC 是 runtime 行為,雖然編譯時會插入 retain/release,但真正的記憶體管理發生在執行階段。 具即時性與低延遲優勢,效能優於 GC,但需留意 class 濫用與 closure retain cycle 問題。 #SwiftARC #MemoryOptimization #ARC
0
0
0
【closure 內部修改外部變數的行為是什麼?】 closure 會 capture 外部變數,值型別會複製,參考型別會共享記憶體。 若 closure 內部修改外部變數,可能造成副作用,特別在非同步與迴圈中要留意。 #ClosureCapture #SwiftTips #Closure
0
0
0
【closure 捕捉 self = nil 的風險在哪?】 非同步 closure 強引用 self,若畫面已釋放會造成 crash。 建議用 [weak self] 避免野指標,確保安全執行。 #Closure #OptionalSelf #SwiftBug
0
0
0
【@escaping 可以與 inout 搭配嗎?】 - 解釋閉包與參數修飾子的衝突。 @escaping 表示閉包會在函示結束後執行。 inout 要求參數在函式作用域內就完成修改。 若將 inout 傳入逃逸閉包,閉包執行時參數可能已不存在,會導致記憶體錯誤。 #SwiftClosure #Inout #SwiftTips #Closure
0
0
0
【如何測試 protocol + delegate 的邏輯?】 建立 mock 類別實作 delegate,加布林旗標記是否被呼叫,搭配 XCTAssertTrue 驗證。 可確保 delegate 方法有正確執行。 #SwiftTest #ProtocolMock #iOSUnitTest #Protocol #Delegate
0
0
0
【為什麼 protocol 不能加 stored property?】 - Swift 設計限制與 workaround。 Protocol 是定義方法,非「儲存」。 若想給 protocol 加儲存行為,可搭配 associated object (限 class )或 外部儲存模型(如 ViewModel )實現類似效果。 #ProtocolLimitation #SwiftDesign #Protocol #Delegate
0
0
0
【怎麼設計 protocol 才能避免 Retain Cycle?】 - protocol callback 搭配 class 限制與 weak delegate 技巧。 使用 :AnyObject 限定 protocol 只給 class 實作,這樣才能讓使用端 weak 修飾 delegate。 使用 weak var delegate,避免強參考。 #SwiftProtocol #MemoryTips #Protocol #Delegate
0
0
0
【UICollectionView 的 indexPath 可能為 nil 嗎?】 是的,indexPath(for:) 有機會回傳 nil,例如:cell 尚未 layout、已被刪除或動畫中、或傳入的不是 collectionView 的 cell。 #UICollectionView #IndexPath #iOSDev
0
0
0
【diffable snapshot.append vs insert 差在哪?】 append 是在 section 或 item 結尾新增資料,insert 可指定位置插入以控制順序。 重複插入相同 item 會 crash,更新時務必確保唯一性。 #iOSDev #DiffableDataSource #CollectionView
0
0
0
【UICollectionView 的 batch updates 怎麼用?】 使用 performBatchUpdates 可同時執行多項資料變動(插入、刪除、移動),確保動畫順暢、避免畫面錯亂。 常見用法:如批次加入、刪除 cell 或調整排序。 #CollectionView #BatchUpdates #UICollectionViewTips
0
0
0