如何在Swift中使用weak修飾Delegate

1.使用關鍵詞「weak」是爲了不強引用致使的閉環。當兩個對象相互強引用對方時就會引發引用閉環,他們的引用計數永遠都不會爲零;數據庫

2.僅當delegate是一個類時,使用weak關鍵詞。Swift中的struct和enums是值對象類型(當一個新的實例生成時只是值複製),不是引用類型,因此它們不會引發強引用閉環;swift

3.weak引用是可選的(optional),因此必須使用var修飾詞,這樣在釋放時能夠置爲nil;異步

4.父類對子類有強引用,從而不使用weak。可是當子類須要引用父類對象的時候,須要使用weak;code

5.當不想擁有一個類的引用時,使用weak,而不單單是子類引用父類對象。當兩個非繼承的類對象須要相互引用對方時,選擇一個使用weak;對象

6.建議delegate使用weak修飾,由於大多數狀況,對象不須要擁有delegate。可是也有一些狀況delegate是須要使用strong修飾,好比你在異步讀取數據庫時,能夠在讀取過程當中保持delegate,在讀取成功或者失敗後,再設置delegate爲nil;繼承

7.協議protocol既能夠用在類中也能夠用在非類類型中(好比struct,enums),當在類中使用,須要標記協議類型是classio

protocol MyClassDelegate: class {
    // ...
}

class SomeClass {
    weak var delegate: MyClassDelegate?
}
相關文章
相關標籤/搜索