013 Swift3 0之迴圈強引用

2022-07-15 04:33:12 字數 2017 閱讀 8032

一、解決例項屬性之間的迴圈強引用

1.弱引用

//

定義乙個person(人)類

class

person

//析構函式

deinit }//

定義乙個apartment(公寓)類

class

apartment

//析構函式

deinit }//

初始化建立乙個person(人)物件

var frank = person(name: "

frank")

//初始化建立乙個apartment(公寓)物件

var wanda = apartment(name: "萬達"

)//如果不是apartment對person的弱引用,就會造成彼此的迴圈強引用,造成記憶體洩漏

frank.apartment =wanda

wanda.tenant = frank

2.無主引用

//

定義乙個customer(擁有者)的類

class

customer

deinit }//

定義乙個creditcard(信用卡)的類

class

creditcard

deinit }//

定義乙個customer物件

var emma: customer?emma = customer(name: "

emma")

emma!.card = creditcard(number: 1234_5678_3434_9009, customer: emma!) //

繫結信用卡

//繫結信用卡的時候,其實就存在乙個迴圈引用,好在信用卡只是對於擁有者是無助引用,所以沒有造成迴圈強引用

3.無主引用以及隱式解析可選屬性

//

定義乙個country(國家)類

class

country }//

定義乙個city(城市)類

class

city }//

定義乙個country物件

var country = country(name: "

china

", capitalname: "

beijing")

print(

"\(country.name)的首都是\(country.capitalcity.name)

")

1)當兩個迴圈引用屬性均為可選型別時,也就是均允許為nil,並且會產生潛在的迴圈強引用,這種場景最適合通過弱引用2)當兩個迴圈引用屬性中乙個屬性為可選型別時,也就是只有乙個允許為nil,而另乙個屬性的值不允許為nil,這也可能會產生迴圈強引用,這種場景適合通過無主引用3)當兩個迴圈引用屬性都必須有值,並且初始化完成後永遠不會為nil,這種場景需要乙個類使用無主屬性,而另外乙個類使用隱式解析可選屬性

二、解決閉包產生的迴圈強引用

//

定義乙個htmlelement(html標籤)類

class

htmlelement

else

}init(name: string, text: string? =nil)

deinit

}var paragraph: htmlelement? = htmlelement(name: "

p", text: "

hello, world")

print(paragraph!.ashtml())

Swift3 0之基本語法01

import uikit let a int 10 錯誤寫法,當乙個識別符號定義為常量時是不可以修改的 a 20 var b int 20 因為b定義為變數,因此是可以修改的 b 30import uikit 常量使用注意 1 優先使用常量 2 常量的本質 1.注意一 在開發中let var在選擇時...

swift3 0之陣列的常用例項

宣告乙個空的陣列 let emptyarray1 建立乙個特定資料型別的空陣列 var emptyarray2 string 插入元素進陣列的最後位置 指定位置插入元素進陣列 emptyarray2.insert oranges at 0 陣列點個數 print emptyarray2.count ...

Swift 3 0基礎學習之閉包

前言 閉包是功能性自包含模組,可以在 中被傳遞和使用。swift 中的閉包與 c 和 objective c中的 blocks 以及其他一些程式語言中的 lambdas 比較相似。下面這篇文章就來詳細介紹了關於swift 3.0中的閉包,感興趣的一起來看看吧。開始閉包的書寫格式如下 如reverse...