2014-02-24 86 views
4

比方說,我有一個全屏幕UIView當按鈕被觸摸時覆蓋主屏幕,然後就離開這個時候重疊視圖感動。可以使用addSubview:removeFromSuperviewUIView添加到當前視圖並將其從當前視圖中刪除,也可以在當前視圖初始化後添加,然後通過訪問和設置UIViewhidden屬性進行顯示和隱藏。性能通常更快,更好(或者它們是相同的)?速度的UIView添加/ /刪除子視圖與隱藏顯示

回答

2

我敢打賭,顯示和隱藏會更快。另一種方式需要創建/銷燬對象,以及子視圖。

更重要的是,我想顯示和隱藏將是簡單的,以及對複雜的鬥爭中是至關重要的。

+0

我同意它似乎更復雜,但它真的是對象創建/銷燬?如果我創建了疊加層,請在超級視圖上附加一個指向它的指針,並根據需要將它從視圖中添加/刪除,是不是隻是一個指針交換?我只用了一次alloc/init。 –

+0

好的,但是很難看到任何好處。無論如何,隱藏的子視圖在合成時都會被忽略。看起來像我不成熟的優化(參見http://en.wikipedia.org/wiki/Program_optimization)。 –

+0

是否有工具來檢查性能? –

1

我也嘗試添加的ImageView,並嘗試環路100萬倍隱藏和顯示在每個循環,並添加在每個循環中刪除。結果隱藏並顯示取1s做1000000循環。並添加刪除3秒。我這樣做是在模擬器:)

0

粘土說,顯示隱藏很可能會更快,但你需要靈敏的儀器來檢測的差異。最多隻有一位數百分之一秒,可能比這少得多。你將無法通過「眼睛」來感覺到這種差異。

因此,重要的是其他的東西,比如什麼是最容易理解和維護?在視圖控制器中存在一個視圖存在的問題,並且很好地顯示/隱藏該視圖的問題是視圖的佈局覆蓋視圖控制器的其他內容,並且使其難以管理。

您可以創建第二個XIB(或與故事板配合使用的XIB),它具有視圖控制器的類,因爲它是「文件的所有者」,並將IBOutlets鏈接到所需的視圖。然後在需要時從XIB加載視圖,將其安裝爲當前視圖的子視圖。然後,當你完成它時,將它從超級視圖中移除。我使用這種方法相當數量。