溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

iOS UIView的addSubview:和removeFromSuperview方法

發布時間:2020-06-28 02:24:10 來源:網絡 閱讀:1064 作者:李遠超0317 欄目:移動開發

問題描述:

   一個UIView(bView)經過alloc、init之后,add到UIView(aView)上,此時及時的對bView做了release操作。

   情況一、現在又有一個UIView(cView),我要做[cView addSubview:bView];那么在此之前有沒有必要做[bView removeFromSuperview];操作?

   情況二、在某種情況下(比如在按鈕的響應事件里),我需要多次執行[aView addSubview:bView];那么在每次add之前有沒有必要做remove操作?

       說明:情況一和二相互獨立的,沒有聯系。

結論是:

   兩種情況都不需要做remove操作。特別的情況二,如果做了remove操作,在做add操作會引起崩潰,原因是removeFromSuperview會執行release操作,此時它的retainCount已經是0了,內存會被釋放。如果把上面release放到dealloc中就不會引起崩潰了。

官方文檔做依據:

   If view already has a superview and that view is not the receiver, this method removes the previous superview before making the receiver its new superview.

個人理解:

   現在有一個勺子,一個杯子,一個缸子。前提是我將勺子放入杯子中了。

   情況一、我想將勺子放入缸子中,我所需要做的就是將勺子放入缸子中。因為SDK會判斷出此時勺子在杯子中,它會自動執行把勺子從杯子中拿出來的操作。

   情況二、我想將勺子放入杯子中,我所需要的還是將勺子放入杯子中。因為SDK會判斷出此時勺子就在杯子中,它所執行的就是什么都不做,因為勺子已經在杯子中了。

容易混淆的概念:

   這是針對同一個UIView的。還有一種情況,把bView加到aView上,此時又將cView加到aView上(bView和cView的frame相同)那么在這個時候是需要對bView做removeFromSuperview操作的。

   addSubview:所執行的就是將UIView加到一個集合中,此時如果不移除bView,雖然不會造成內存泄露,但是會浪費內存,沒有必要在集合中保存bView了(特殊需求除外)。


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女