代碼創(chuàng)建一個uiview的時候,使用weak還是strong比較好?

提出問題:代碼創(chuàng)建一個uiview控件的時候,聲明weak還是strong?

UI 控件用默認(rèn)用 weak,根源還是蘋果希望只有這些 UI 控件的父 View 來強(qiáng)引用它們,而 ViewController 只需要強(qiáng)引用 ViewController.view 成員,則可以間接持有所有的 UI 控件。這樣有一個好處是:在以前,當(dāng)系統(tǒng)收到 Memory Warning 時,會觸發(fā) ViewController 的 viewDidUnload 方法,這樣的弱引用方式,可以讓整個 view 整體都得到釋放,也更方便重建時整體重新構(gòu)造。

但是首先 viewDidUnload 方法在 iOS 6 開始就被廢棄掉了,蘋果用了更簡單有效地方式來解決內(nèi)存警告時的視圖資源釋放,具體如何做的呢?嗯,這個可以當(dāng)作某一期的面試題展開介紹??傊褪牵悄闾厥獾夭僮?view 成員,ViewController.view 的生命期和 ViewController 是一樣的了。

所以在這種情況下,其實 UI 控件是不是 weak 其實關(guān)系并不大。當(dāng) UI 控件是 weak 時,它的引用計數(shù)是 1,持有它的是它的 superview,當(dāng) UI 控件是 strong 時,它的引用計數(shù)是 2,持有它的有兩個地方,一個是它的 superview,另一個是這個 strong 的指針。UI 控件并不會持有別的對象,所以,不管是手寫代碼還是 Storyboard,UI 控件是 strong 都不會有循環(huán)引用的。

那么回到我們的最初的問題,自己寫的 view 成員,應(yīng)該用 weak 還是 strong?我個人覺得應(yīng)該用 strong,因為用 weak 并沒有什么特別的優(yōu)勢,加上上一篇面試題文章中,我們還看到,其實 weak 變量會有額外的系統(tǒng)維護(hù)開銷的,如果你沒有使用它的特別的理由,那么用 strong 的話應(yīng)該更好。

另外有讀者也提到,如果你要做 Lazy 加載,那么你也只能選擇用 strong。

注意,如果你非要用 weak,其實也沒什么問題,只需要注意在賦值前,先把這個對象用 addSubView 加到父 view 上,否則可能剛剛創(chuàng)建完,它就被釋放了。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容