2017-08-09 49 views
0

假設我以編程方式創建UILabel,然後將其作爲子視圖添加到我自己的UIViewController的子類的主視圖中。我還想在視圖控制器的類級別存儲對它的引用,以便稍後使用它。我應該讓它成爲一個弱點嗎? 更重要的是爲什麼?在UIViewController中創建的子視圖的弱引用

我看到人們總是這樣做,我不明白這一點。我認爲一個薄弱的參考點是爲了避免保留週期,但這裏沒有保留週期。

我當然可以看到這裏遍佈的代碼,其中人們使用故事板/筆尖(我從來沒有嘗試過使用,所以我只在非常基本的層面上理解),但即使在那裏,我也不明白爲什麼弱引用是合適的。那裏沒有保留週期,對吧?

+0

我並不認爲這是你引用的重複內容,因爲我主要關注的是編程創建子視圖而非直銷。 –

回答

1

不,沒有理由成爲一個弱引用,你已經正確地認定它是一個單向關係。過去,Interface Builder代碼生成器在默認情況下生成了弱引用(這可能是您爲什麼看到它的原因)。Apple的指導已經隨着時間推移發生了變化,您可以在此處閱讀: Should IBOutlets be strong or weak under ARC?

+0

問題是關於程序創建的子視圖,而不是IBOutlet。 –

+0

@JoshuaKaden:他在問題中提到了故事板/筆尖,所以爲了清晰起見,我添加了詳細信息。 – jlew

+0

@JoshuaKaden - 另外,問題基本上是一樣的。視圖層次結構將保留強大的參考,因此您無需保留強大的參考。但「弱」引用不是免費的(不可否認,開銷很小)。另外,當以編程方式創建要保存在某個弱引用中的子視圖時,必須編寫代碼,將子視圖保存在某個局部變量中,同時將視圖添加到層​​次結構並保存引用。底線強引用產生更簡單的代碼,只要沒有引用循環,這是很好的。 – Rob

相關問題