在iOS中系統的彈窗提示有三個控件可以使用。分別是UIAlertView(iOS9.0過時)和UIActionSheet(iOS8.3過時),他們在iOS9.0都已經過時。
系統推出了新的控件UIAlertController控件 他整合UIAlertView和UIActionSheet兩者的特點。
它的使用相對比較方面簡單,基本使用如圖
1.創建AlertController對象。 并且指定title和message信息,通過preferredStyle可以指定要展示的樣式(分別是;alertView和ActionSheet兩種樣式)
2.創建UIAlertAction事件。 它是用來進行操作的選項可以有多個。每一個alertAction對象都對應一個handler代碼塊它里面是 當觸發此選項時要做的操作
3.把alertAction添加到UIAlertController中
4.展示UIAlertController控制器
上述四個步驟是 在使用UIAlertController的基本操作。但是在使用時有一個特別容易被忽視的地方就是在 handle事件中使用了 UIAlertController控制器。這里會造成循環引用,在堆內存中殘留大量的無用對象無法被銷毀。
產生循環引用的原因:
a.創建的UIAlertAction會被UIAlertController的一個actions屬性引用。
b.在UIAlertAction中他的handler代碼塊 會引用UIAlertController對象(如果是直接使用UIAlertController對象)。
c.actions屬性又被UIAlertController對象引用。
解決上述循環引用的辦法就是在b這條線上進行額外處理,在代碼塊中不直接使用UIAlertController對象 而是使用__weak處理
注意:為了驗證處理之后的效果 可自定義UIAlertController類重寫dealloc方法 判斷是否正確被銷毀。