0
我剛纔在看一個關於swift優化的討論,他們使用了一個帶有5個變量的結構的例子3個字符串一個數組和一個字典。他們說降低引用計數你可以使用包裝類。有人可以製作一個虛擬的,我可能會更好地理解它。Swift包裝類
我剛纔在看一個關於swift優化的討論,他們使用了一個帶有5個變量的結構的例子3個字符串一個數組和一個字典。他們說降低引用計數你可以使用包裝類。有人可以製作一個虛擬的,我可能會更好地理解它。Swift包裝類
如果您的結構具有許多屬性爲引用類型的結構存在性能問題,則將使用包裝類。
一個通用的包裝類:
class Wrapper<T> {
var value: T // or "let" instead of "var"
init(_ value: T) { self.value = value }
}
這是因爲,如果你把它分配給另一個變量屬性的所有指針被複制,因此,所有引用計數(見ARC)得到增加(並在年底減)。
此問題主要發生在您循環遍歷此類結構的大數組時,每次迭代都會創建一個新變量。
對於包裝類,只有其引用計數纔會增加和減少一次。
例子:
struct Big {
// "n" properties which have reference semantics
...
...
}
// "m" count
let hugeArray = [Big(), Big(), Big(), ...]
// m * n reference count operations (+1, -1)
for element in hugeArray {
// do something
}
// if huge array is of type [Wrapper<Big>]
// m * 1 reference count operations (+1, -1)
for element in hugeArray {
// do something
}
邊注:這樣的類可以提高性能。因爲它「改變」了包裝類型的語義,並且沒有值類型,所以如果寫入它,將其分配或傳遞爲參數,請小心使用它。
你可以分享一個關於「快速優化」的演講,看看你到底在說什麼嗎? – pacification