什么情況使用 weak 關(guān)鍵字?
- 在 ARC 中,在有可能出現(xiàn)循環(huán)引用的時(shí)候,往往要通過(guò)讓其中一端使用 weak 來(lái)解決,比如: delegate、block。
- 自身已經(jīng)對(duì)它進(jìn)行一次強(qiáng)引用,沒(méi)有必要再?gòu)?qiáng)引用一次,此時(shí)也會(huì)使用 weak,自定義 IBOutlet 控件屬性一般也使用 weak,使用 storyboard(xib 不行)創(chuàng)建的 vc,會(huì)有一個(gè)叫 _topLevelObjectsToKeepAliveFromStoryboard 的私有數(shù)組強(qiáng)引用所有 top level 的對(duì)象,所以這時(shí)即便 outlet 聲明成 weak 也沒(méi)關(guān)系。當(dāng)然,也可以使用 strong。
weak 和 assign 的不同點(diǎn):
- weak、assign 修飾的屬性指向一個(gè)對(duì)象時(shí)都不會(huì)增加對(duì)象的引用計(jì)數(shù)。然而在所指的對(duì)象被釋放時(shí),weak 屬性值會(huì)被置為 nil,而 assign 屬性不會(huì)。
- assign 可以用非 OC 對(duì)象以及基本類型,而 weak 必須用于 OC 對(duì)象。
更多:iOS面試題合集