在iOS中系統(tǒng)的彈窗提示有三個(gè)控件可以使用丹墨。分別是UIAlertView(iOS9.0過(guò)時(shí))和UIActionSheet(iOS8.3過(guò)時(shí)),他們?cè)趇OS9.0都已經(jīng)過(guò)時(shí)廊遍。
系統(tǒng)推出了新的控件UIAlertController控件 他整合UIAlertView和UIActionSheet兩者的特點(diǎn)。
它的使用相對(duì)比較方面簡(jiǎn)單贩挣,基本使用如圖
1.創(chuàng)建AlertController對(duì)象喉前。 并且指定title和message信息,通過(guò)preferredStyle可以指定要展示的樣式(分別是;alertView和ActionSheet兩種樣式)
2.創(chuàng)建UIAlertAction事件王财。 它是用來(lái)進(jìn)行操作的選項(xiàng)可以有多個(gè)卵迂。每一個(gè)alertAction對(duì)象都對(duì)應(yīng)一個(gè)handler代碼塊它里面是 當(dāng)觸發(fā)此選項(xiàng)時(shí)要做的操作
3.把a(bǔ)lertAction添加到UIAlertController中
4.展示UIAlertController控制器
上述四個(gè)步驟是 在使用UIAlertController的基本操作。但是在使用時(shí)有一個(gè)特別容易被忽視的地方就是在 handle事件中使用了 UIAlertController控制器绒净。這里會(huì)造成循環(huán)引用见咒,在堆內(nèi)存中殘留大量的無(wú)用對(duì)象無(wú)法被銷(xiāo)毀。
產(chǎn)生循環(huán)引用的原因:
a.創(chuàng)建的UIAlertAction會(huì)被UIAlertController的一個(gè)actions屬性引用挂疆。
b.在UIAlertAction中他的handler代碼塊 會(huì)引用UIAlertController對(duì)象(如果是直接使用UIAlertController對(duì)象)改览。
c.actions屬性又被UIAlertController對(duì)象引用下翎。
解決上述循環(huán)引用的辦法就是在b這條線(xiàn)上進(jìn)行額外處理,在代碼塊中不直接使用UIAlertController對(duì)象 而是使用__weak處理
注意:為了驗(yàn)證處理之后的效果 可自定義UIAlertController類(lèi)重寫(xiě)dealloc方法 判斷是否正確被銷(xiāo)毀宝当。