一、解決例項屬性之間的迴圈強引用
1.弱引用
//2.無主引用定義乙個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
//定義乙個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.無主引用以及隱式解析可選屬性
//1)當兩個迴圈引用屬性均為可選型別時,也就是均允許為nil,並且會產生潛在的迴圈強引用,這種場景最適合通過弱引用2)當兩個迴圈引用屬性中乙個屬性為可選型別時,也就是只有乙個允許為nil,而另乙個屬性的值不允許為nil,這也可能會產生迴圈強引用,這種場景適合通過無主引用3)當兩個迴圈引用屬性都必須有值,並且初始化完成後永遠不會為nil,這種場景需要乙個類使用無主屬性,而另外乙個類使用隱式解析可選屬性定義乙個country(國家)類
class
country }//
定義乙個city(城市)類
class
city }//
定義乙個country物件
var country = country(name: "
china
", capitalname: "
beijing")
print(
"\(country.name)的首都是\(country.capitalcity.name)
")
二、解決閉包產生的迴圈強引用
//定義乙個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...