- Hands-On Design Patterns with Swift
- Florent Vilmart Giordano Scalzo Sergio De Simone
- 300字
- 2021-07-02 14:45:07
Using unowned
In our particular example, we cannot guarantee the duration of the life cycle of our objects, so unowned is unfit us example. Also, unowned provides fewer guarantees than weak, in terms of safety, can't be applied to Optionals. If you can't use weak for logic reasons, then there's little chance you'll be able to use unowned.
Let's investigate another piece of code involving credit cards, borrowed from Chapter 1, Refreshing the Basics.
First, let's see the code without the unowned modifier under the memory debugger:
class Card {
let owner: Person
init(_ owner: Person) {
self.owner = owner
}
}
class Person {
let name: String
var cards = [Card]()
init(name: String) {
self.name = name
}
}
func runTests() {
let batman = Person(name: "Batman")
batman.cards.append(Card(batman))
batman.cards.append(Card(batman))
batman.cards.append(Card(batman))
}
runTests()
This simple program should not leave any objects behind after runTests() finishes running; however, because we have a strong reference cycle between Person and Card, that is not the case, and all of the created objects will leak:

All of our objects have leaked, as shown in the preceding screenshot. This example is perfect for using unowned. The Card object can't live without an owner. So, whenever the owner is deallocated, all of the cards should be destroyed as well, as we'll never reference a card without its owner. We need to update our Card class to reflect that the Card objects are not retaining their owner:
class Card {
unowned let owner: Person
init(_ owner: Person) {
self.owner = owner
}
}
With this addition, the card cannot be allocated without a Person, and this person has to exist to be a valid card. In the next section, you'll see the issues that unowned can cause, and how we can prevent them.
- 我們都是數據控:用大數據改變商業、生活和思維方式
- Hands-On Data Structures and Algorithms with Rust
- SQL Server入門經典
- 卷積神經網絡的Python實現
- 工業大數據分析算法實戰
- iOS and OS X Network Programming Cookbook
- 深度剖析Hadoop HDFS
- 智能數據時代:企業大數據戰略與實戰
- Oracle PL/SQL實例精解(原書第5版)
- 云原生數據中臺:架構、方法論與實踐
- 達夢數據庫運維實戰
- 探索新型智庫發展之路:藍迪國際智庫報告·2015(上冊)
- 菜鳥學SPSS數據分析
- 利用Python進行數據分析(原書第2版)
- 算力經濟:從超級計算到云計算