[英]Normal array in Swift vs 'NSMutableArray'?
那么在 Swift 中,有什么區別
var arr = ["Foo", "Bar"] // normal array in Swift
和
var arr = NSMutableArray.array() // 'NSMutableArray' object
["Foo", "Bar"].map {
arr.addObject($0)
}
除了是同一事物的不同實現。 兩者似乎都具有人們可能需要的所有基本功能( .count
,插入/刪除對象的能力等)。
NSMutableArray
是在 Obj-C 時代發明的,顯然是為了提供更現代的解決方案,而不是常規的 C 樣式數組。 但是它與 Swift 的內置數組相比如何呢?
哪個更安全和/或更快?
在我看來,最重要的區別是 NSMutableArray 是一種類類型,而 Array 是一種值類型。 因此,NSMutableArray 將作為引用傳遞,而 Swift Array 將通過值傳遞。
此外 NSMutableArray 是 NSObject 的子類,而 Array 沒有父類。 - 這意味着您在使用 NSMutableArray 時可以訪問所有 NSObject 方法和其他“好東西”。
修改時不會復制 NSMutableArray,而會復制 Swift Array。
哪一個最好取決於您的應用程序。
我發現(當使用 UIKit 和 Cocoa touch 時)當我需要一個持久模型時 NSMutableArray 非常棒,而 Array 非常適合性能並丟棄數組。
這些只是我的初步想法,我相信社區中的某個人可以提供更深入的見解。
引用類型何時:(NSMutableArray)
NSObject 的子類必須是類類型 將實例標識與 === 進行比較是有意義的 您想要創建共享的、可變的狀態
值類型何時:(Swift 數組)
將實例數據與 == 進行比較是有意義的(Equatable 協議)您希望副本具有獨立的狀態
數據將在跨多個線程的代碼中使用(避免顯式同步)
有趣的是,Swift 標准庫非常偏愛值類型:原始類型(Int、Double、String 等)是值類型標准集合(Array、Dictionary、Set 等)是值類型
除了上面說明的內容之外,選擇實際上取決於您要實現的內容。 根據經驗,如果沒有強制您選擇引用類型的特定約束,或者您不確定哪個選項最適合您的特定用例,您可以從使用值類型實現數據結構開始。 如果需要,您應該能夠稍后以相對較少的努力將其轉換為引用類型。
結論:
引用類型會產生更多的內存開銷,來自引用計數以及將其數據存儲在堆上。
值得知道的是,在 Swift中復制值類型相對便宜,
但重要的是要記住,如果您的值類型變得太大,復制的性能成本可能會大於使用引用類型的成本。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.